From 3f44ecb0681800cf0b68da2aa17c8c28699c6b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Fri, 27 Jun 2025 12:30:25 +0300 Subject: [PATCH 001/104] feat(modules/bar): add weather bar --- .config/quickshell/constants/WeatherIcons.qml | 59 ++++++++ .config/quickshell/modules/bar/Bar.qml | 135 ++++++++++-------- .../modules/bar/weather/WeatherBar.qml | 68 +++++++++ .../modules/bar/weather/WeatherCard.qml | 45 ++++++ .../modules/bar/weather/WeatherPopup.qml | 95 ++++++++++++ .../modules/common/ConfigOptions.qml | 17 +++ .../quickshell/services/WeatherService.qml | 105 ++++++++++++++ 7 files changed, 462 insertions(+), 62 deletions(-) create mode 100644 .config/quickshell/constants/WeatherIcons.qml create mode 100644 .config/quickshell/modules/bar/weather/WeatherBar.qml create mode 100644 .config/quickshell/modules/bar/weather/WeatherCard.qml create mode 100644 .config/quickshell/modules/bar/weather/WeatherPopup.qml create mode 100644 .config/quickshell/services/WeatherService.qml diff --git a/.config/quickshell/constants/WeatherIcons.qml b/.config/quickshell/constants/WeatherIcons.qml new file mode 100644 index 000000000..bd74d4e17 --- /dev/null +++ b/.config/quickshell/constants/WeatherIcons.qml @@ -0,0 +1,59 @@ +pragma Singleton + +import Quickshell + +Singleton { + // credits: calestia + // this snippet is taken from + // https://github.com/caelestia-dots/shell + readonly property var codeToName: ({ + "113": "clear_day", + "116": "partly_cloudy_day", + "119": "cloud", + "122": "cloud", + "143": "foggy", + "176": "rainy", + "179": "rainy", + "182": "rainy", + "185": "rainy", + "200": "thunderstorm", + "227": "cloudy_snowing", + "230": "snowing_heavy", + "248": "foggy", + "260": "foggy", + "263": "rainy", + "266": "rainy", + "281": "rainy", + "284": "rainy", + "293": "rainy", + "296": "rainy", + "299": "rainy", + "302": "weather_hail", + "305": "rainy", + "308": "weather_hail", + "311": "rainy", + "314": "rainy", + "317": "rainy", + "320": "cloudy_snowing", + "323": "cloudy_snowing", + "326": "cloudy_snowing", + "329": "snowing_heavy", + "332": "snowing_heavy", + "335": "snowing", + "338": "snowing_heavy", + "350": "rainy", + "353": "rainy", + "356": "rainy", + "359": "weather_hail", + "362": "rainy", + "365": "rainy", + "368": "cloudy_snowing", + "371": "snowing", + "374": "rainy", + "377": "rainy", + "386": "thunderstorm", + "389": "thunderstorm", + "392": "thunderstorm", + "395": "snowing" + }) +} diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index 0a890c6ee..1eefb15d6 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -3,6 +3,7 @@ import "root:/services" import "root:/modules/common/" import "root:/modules/common/widgets" import "root:/modules/common/functions/color_utils.js" as ColorUtils +import "root:/modules/bar/weather" import QtQuick import QtQuick.Controls import QtQuick.Layouts @@ -27,7 +28,8 @@ Scope { color: Appearance.colors.colOutlineVariant } - Variants { // For each monitor + Variants { + // For each monitor model: { const screens = Quickshell.screens; const list = ConfigOptions.bar.screenList; @@ -42,12 +44,8 @@ Scope { property ShellScreen modelData property var brightnessMonitor: Brightness.getMonitorForScreen(modelData) - property real useShortenedForm: (Appearance.sizes.barHellaShortenScreenWidthThreshold >= screen.width) ? 2 : - (Appearance.sizes.barShortenScreenWidthThreshold >= screen.width) ? 1 : 0 - readonly property int centerSideModuleWidth: - (useShortenedForm == 2) ? Appearance.sizes.barCenterSideModuleWidthHellaShortened : - (useShortenedForm == 1) ? Appearance.sizes.barCenterSideModuleWidthShortened : - Appearance.sizes.barCenterSideModuleWidth + property real useShortenedForm: (Appearance.sizes.barHellaShortenScreenWidthThreshold >= screen.width) ? 2 : (Appearance.sizes.barShortenScreenWidthThreshold >= screen.width) ? 1 : 0 + readonly property int centerSideModuleWidth: (useShortenedForm == 2) ? Appearance.sizes.barCenterSideModuleWidthHellaShortened : (useShortenedForm == 1) ? Appearance.sizes.barCenterSideModuleWidthShortened : Appearance.sizes.barCenterSideModuleWidth WlrLayershell.namespace: "quickshell:bar" implicitHeight: barHeight + Appearance.rounding.screenRounding @@ -74,7 +72,7 @@ Scope { } color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" height: barHeight - + MouseArea { // Left side | scroll to change brightness id: barLeftSideMouseArea anchors.left: parent.left @@ -87,21 +85,21 @@ Scope { acceptedButtons: Qt.LeftButton hoverEnabled: true propagateComposedEvents: true - onEntered: (event) => { - barLeftSideMouseArea.hovered = true + onEntered: event => { + barLeftSideMouseArea.hovered = true; } - onExited: (event) => { - barLeftSideMouseArea.hovered = false - barLeftSideMouseArea.trackingScroll = false + onExited: event => { + barLeftSideMouseArea.hovered = false; + barLeftSideMouseArea.trackingScroll = false; } - onPressed: (event) => { + onPressed: event => { if (event.button === Qt.LeftButton) { - Hyprland.dispatch('global quickshell:sidebarLeftOpen') + Hyprland.dispatch('global quickshell:sidebarLeftOpen'); } } // Scroll to change brightness WheelHandler { - onWheel: (event) => { + onWheel: event => { if (event.angleDelta.y < 0) barRoot.brightnessMonitor.setBrightness(barRoot.brightnessMonitor.brightness - 0.05); else if (event.angleDelta.y > 0) @@ -113,17 +111,18 @@ Scope { } acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad } - onPositionChanged: (mouse) => { + onPositionChanged: mouse => { if (barLeftSideMouseArea.trackingScroll) { const dx = mouse.x - barLeftSideMouseArea.lastScrollX; const dy = mouse.y - barLeftSideMouseArea.lastScrollY; - if (Math.sqrt(dx*dx + dy*dy) > osdHideMouseMoveThreshold) { - Hyprland.dispatch('global quickshell:osdBrightnessHide') + if (Math.sqrt(dx * dx + dy * dy) > osdHideMouseMoveThreshold) { + Hyprland.dispatch('global quickshell:osdBrightnessHide'); barLeftSideMouseArea.trackingScroll = false; } } } - Item { // Left section + Item { + // Left section anchors.fill: parent implicitHeight: leftSectionRowLayout.implicitHeight implicitWidth: leftSectionRowLayout.implicitWidth @@ -135,22 +134,22 @@ Scope { side: "left" anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter - } - + RowLayout { // Content id: leftSectionRowLayout anchors.fill: parent spacing: 10 - RippleButton { // Left sidebar button + RippleButton { + // Left sidebar button Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter Layout.leftMargin: Appearance.rounding.screenRounding Layout.fillWidth: false property real buttonPadding: 5 implicitWidth: distroIcon.width + buttonPadding * 2 implicitHeight: distroIcon.height + buttonPadding * 2 - + buttonRadius: Appearance.rounding.full colBackground: barLeftSideMouseArea.hovered ? Appearance.colors.colLayer1Hover : ColorUtils.transparentize(Appearance.colors.colLayer1Hover, 1) colBackgroundHover: Appearance.colors.colLayer1Hover @@ -159,10 +158,10 @@ Scope { colBackgroundToggledHover: Appearance.colors.colSecondaryContainerHover colRippleToggled: Appearance.colors.colSecondaryContainerActive toggled: GlobalStates.sidebarLeftOpen - property color colText: toggled ? Appearance.m3colors.m3onSecondaryContainer : Appearance.colors.colOnLayer0 + property color colText: toggled ? Appearance.m3colors.m3onSecondaryContainer : Appearance.colors.colOnLayer0 onPressed: { - Hyprland.dispatch('global quickshell:sidebarLeftToggle') + Hyprland.dispatch('global quickshell:sidebarLeftToggle'); } CustomIcon { @@ -170,10 +169,9 @@ Scope { anchors.centerIn: parent width: 19.5 height: 19.5 - source: ConfigOptions.bar.topLeftIcon == 'distro' ? - SystemInfo.distroIcon : "spark-symbolic" + source: ConfigOptions.bar.topLeftIcon == 'distro' ? SystemInfo.distroIcon : "spark-symbolic" } - + ColorOverlay { anchors.fill: distroIcon source: distroIcon @@ -211,34 +209,38 @@ Scope { visible: barRoot.useShortenedForm < 2 Layout.fillWidth: true } - } - VerticalBarSeparator {visible: ConfigOptions?.bar.borderless} + VerticalBarSeparator { + visible: ConfigOptions?.bar.borderless + } BarGroup { id: middleCenterGroup padding: workspacesWidget.widgetPadding Layout.fillHeight: true - + Workspaces { id: workspacesWidget bar: barRoot Layout.fillHeight: true - MouseArea { // Right-click to toggle overview + MouseArea { + // Right-click to toggle overview anchors.fill: parent acceptedButtons: Qt.RightButton - - onPressed: (event) => { + + onPressed: event => { if (event.button === Qt.RightButton) { - Hyprland.dispatch('global quickshell:overviewToggle') + Hyprland.dispatch('global quickshell:overviewToggle'); } } } } } - VerticalBarSeparator {visible: ConfigOptions?.bar.borderless} + VerticalBarSeparator { + visible: ConfigOptions?.bar.borderless + } MouseArea { id: rightCenterGroup @@ -248,13 +250,13 @@ Scope { Layout.fillHeight: true onPressed: { - Hyprland.dispatch('global quickshell:sidebarRightToggle') + Hyprland.dispatch('global quickshell:sidebarRightToggle'); } BarGroup { id: rightCenterGroupContent anchors.fill: parent - + ClockWidget { showDate: (ConfigOptions.bar.verbose && barRoot.useShortenedForm < 2) Layout.alignment: Qt.AlignVCenter @@ -273,6 +275,19 @@ Scope { } } + VerticalBarSeparator { + visible: ConfigOptions?.bar.borderless + } + + // Weather + BarGroup { + id: weatherGroupContent + Layout.fillHeight: true + Layout.alignment: Qt.AlignVCenter + WeatherBar { + visible: ConfigOptions.bar.weather.show + } + } } MouseArea { // Right side | scroll to change volume @@ -286,28 +301,27 @@ Scope { property real lastScrollX: 0 property real lastScrollY: 0 property bool trackingScroll: false - + acceptedButtons: Qt.LeftButton hoverEnabled: true propagateComposedEvents: true - onEntered: (event) => { - barRightSideMouseArea.hovered = true + onEntered: event => { + barRightSideMouseArea.hovered = true; } - onExited: (event) => { - barRightSideMouseArea.hovered = false - barRightSideMouseArea.trackingScroll = false + onExited: event => { + barRightSideMouseArea.hovered = false; + barRightSideMouseArea.trackingScroll = false; } - onPressed: (event) => { + onPressed: event => { if (event.button === Qt.LeftButton) { - Hyprland.dispatch('global quickshell:sidebarRightOpen') - } - else if (event.button === Qt.RightButton) { - MprisController.activePlayer.next() + Hyprland.dispatch('global quickshell:sidebarRightOpen'); + } else if (event.button === Qt.RightButton) { + MprisController.activePlayer.next(); } } // Scroll to change volume WheelHandler { - onWheel: (event) => { + onWheel: event => { const currentVolume = Audio.value; const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2; if (event.angleDelta.y < 0) @@ -321,12 +335,12 @@ Scope { } acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad } - onPositionChanged: (mouse) => { + onPositionChanged: mouse => { if (barRightSideMouseArea.trackingScroll) { const dx = mouse.x - barRightSideMouseArea.lastScrollX; const dy = mouse.y - barRightSideMouseArea.lastScrollY; - if (Math.sqrt(dx*dx + dy*dy) > osdHideMouseMoveThreshold) { - Hyprland.dispatch('global quickshell:osdVolumeHide') + if (Math.sqrt(dx * dx + dy * dy) > osdHideMouseMoveThreshold) { + Hyprland.dispatch('global quickshell:osdVolumeHide'); barRightSideMouseArea.trackingScroll = false; } } @@ -336,7 +350,7 @@ Scope { anchors.fill: parent implicitHeight: rightSectionRowLayout.implicitHeight implicitWidth: rightSectionRowLayout.implicitWidth - + ScrollHint { reveal: barRightSideMouseArea.hovered icon: "volume_up" @@ -351,13 +365,13 @@ Scope { anchors.fill: parent spacing: 5 layoutDirection: Qt.RightToLeft - + RippleButton { // Right sidebar button id: rightSidebarButton Layout.margins: 4 Layout.rightMargin: Appearance.rounding.screenRounding Layout.fillHeight: true - implicitWidth: indicatorsRowLayout.implicitWidth + 10*2 + implicitWidth: indicatorsRowLayout.implicitWidth + 10 * 2 buttonRadius: Appearance.rounding.full colBackground: barRightSideMouseArea.hovered ? Appearance.colors.colLayer1Hover : ColorUtils.transparentize(Appearance.colors.colLayer1Hover, 1) colBackgroundHover: Appearance.colors.colLayer1Hover @@ -373,7 +387,7 @@ Scope { } onPressed: { - Hyprland.dispatch('global quickshell:sidebarRightToggle') + Hyprland.dispatch('global quickshell:sidebarRightToggle'); } RowLayout { @@ -381,7 +395,7 @@ Scope { anchors.centerIn: parent property real realSpacing: 15 spacing: 0 - + Revealer { reveal: Audio.sink?.audio?.muted ?? false Layout.fillHeight: true @@ -475,9 +489,6 @@ Scope { opacity: 1.0 - Appearance.transparency } } - } - } - } diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml new file mode 100644 index 000000000..58f68ab45 --- /dev/null +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -0,0 +1,68 @@ +pragma ComponentBehavior: Bound +import "root:/modules/common" +import "root:/modules/common/widgets" +import "root:/constants" +import "root:/services" +import Quickshell +import QtQuick +import QtQuick.Layouts + +Item { + id: root + property real margin: 5 + implicitHeight: 32 + implicitWidth: mouseArea.implicitWidth + margin * 2 + + MouseArea { + id: mouseArea + property bool hovered: false + implicitWidth: rowLayout.implicitWidth + implicitHeight: rowLayout.implicitHeight + anchors.centerIn: root + + hoverEnabled: true + onEntered: { + popupLoader.item.visible = true; + } + onExited: { + popupLoader.item.visible = false; + } + + RowLayout { + id: rowLayout + + MaterialSymbol { + fill: 0 + text: WeatherIcons.codeToName[WeatherService.data.wCode] + iconSize: Appearance.font.pixelSize.large + color: Appearance.colors.colOnLayer1 + } + + StyledText { + visible: true + font.pixelSize: Appearance.font.pixelSize.normal + color: Appearance.colors.colOnLayer1 + text: WeatherService.data.temp + } + } + } + + LazyLoader { + id: popupLoader + active: true + + component: PopupWindow { + id: popupWindow + implicitWidth: weatherPopup.implicitWidth + implicitHeight: weatherPopup.implicitHeight + anchor.item: root + anchor.edges: Edges.Bottom + anchor.rect.x: (root.implicitWidth - popupWindow.implicitWidth) / 2 + anchor.rect.y: root.implicitHeight + 10 + color: "transparent" + WeatherPopup { + id: weatherPopup + } + } + } +} diff --git a/.config/quickshell/modules/bar/weather/WeatherCard.qml b/.config/quickshell/modules/bar/weather/WeatherCard.qml new file mode 100644 index 000000000..6910b2cc5 --- /dev/null +++ b/.config/quickshell/modules/bar/weather/WeatherCard.qml @@ -0,0 +1,45 @@ +import QtQuick +import QtQuick.Layouts + +import "root:/modules/common" +import "root:/modules/common/widgets" + +Rectangle { + id: root + radius: Appearance.rounding.verysmall + color: Appearance.colors.colLayer1 + border.color: Appearance.colors.colShadow + border.width: 1 + implicitWidth: columnLayout.implicitWidth * 2 + implicitHeight: columnLayout.implicitHeight * 2 + Layout.fillWidth: parent + + property alias title: title.text + property alias value: value.text + property alias symbol: symbol.text + + ColumnLayout { + id: columnLayout + anchors.fill: parent + spacing: -10 + RowLayout { + Layout.alignment: Qt.AlignHCenter + MaterialSymbol { + id: symbol + fill: 0 + iconSize: Appearance.font.pixelSize.normal + } + Text { + id: title + font.pixelSize: Appearance.font.pixelSize.smaller + color: Appearance.colors.colOnLayer2 + } + } + Text { + id: value + Layout.alignment: Qt.AlignHCenter + font.pixelSize: Appearance.font.pixelSize.normal + color: Appearance.colors.colOnLayer2 + } + } +} diff --git a/.config/quickshell/modules/bar/weather/WeatherPopup.qml b/.config/quickshell/modules/bar/weather/WeatherPopup.qml new file mode 100644 index 000000000..04f0c307a --- /dev/null +++ b/.config/quickshell/modules/bar/weather/WeatherPopup.qml @@ -0,0 +1,95 @@ +import "root:/services" +import "root:/modules/common" +import "root:/modules/common/widgets" + +import QtQuick +import QtQuick.Layouts + +Rectangle { + id: root + readonly property real margin: 10 + implicitWidth: columnLayout.implicitWidth + margin * 2 + implicitHeight: columnLayout.implicitHeight + margin * 2 + color: Appearance.colors.colLayer0 + radius: 12 + clip: true + border.color: Appearance.colors.colShadow + border.width: 1 + + ColumnLayout { + id: columnLayout + spacing: 5 + anchors.centerIn: root + implicitWidth: Math.max(header.implicitWidth, gridLayout.implicitWidth) + implicitHeight: gridLayout.implicitHeight + + // Header + RowLayout { + id: header + spacing: 5 + Layout.fillWidth: parent + Layout.alignment: Qt.AlignHCenter + MaterialSymbol { + fill: 0 + text: "location_on" + iconSize: Appearance.font.pixelSize.huge + } + + Text { + text: WeatherService.data.city + font.pixelSize: Appearance.font.pixelSize.large + color: Appearance.colors.colOnLayer0 + } + } + + // Metrics grid + GridLayout { + id: gridLayout + columns: 2 + rowSpacing: 5 + columnSpacing: 5 + uniformCellWidths: true + + WeatherCard { + title: "UV Index" + symbol: "wb_sunny" + value: WeatherService.data.uv + } + WeatherCard { + title: "Wind" + symbol: "air" + value: `(${WeatherService.data.windDir}) ${WeatherService.data.wind}` + } + WeatherCard { + title: "Precipitation" + symbol: "rainy_light" + value: WeatherService.data.precip + } + WeatherCard { + title: "Humidity" + symbol: "humidity_low" + value: WeatherService.data.humidity + } + WeatherCard { + title: "Visibility" + symbol: "visibility" + value: WeatherService.data.visib + } + WeatherCard { + title: "Pressure" + symbol: "readiness_score" + value: WeatherService.data.press + } + WeatherCard { + title: "Sunrise" + symbol: "wb_twilight" + value: WeatherService.data.sunrise + } + WeatherCard { + title: "Sunset" + symbol: "bedtime" + value: WeatherService.data.sunset + } + } + } +} diff --git a/.config/quickshell/modules/common/ConfigOptions.qml b/.config/quickshell/modules/common/ConfigOptions.qml index 198d4affc..ad5395743 100644 --- a/.config/quickshell/modules/common/ConfigOptions.qml +++ b/.config/quickshell/modules/common/ConfigOptions.qml @@ -72,6 +72,16 @@ Singleton { property bool alwaysShowNumbers: false property int showNumberDelay: 300 // milliseconds } + property QtObject weather: QtObject { + property bool show: true + // for specific location checkout gps setting + property string city: "Istanbul" + // use uscs units + // by default use metric (SI) units + property bool useUSCS: false + // in minutes + property int fetchInterval: 10 + } } property QtObject battery: QtObject { @@ -161,4 +171,11 @@ Singleton { property QtObject hacks: QtObject { property int arbitraryRaceConditionDelay: 20 // milliseconds } + + // this is for weather and feature apis + property QtObject gps: QtObject { + property bool active: false + property real latitude: 41.27830580591624 + property real longitude: 28.730357071149154 + } } diff --git a/.config/quickshell/services/WeatherService.qml b/.config/quickshell/services/WeatherService.qml new file mode 100644 index 000000000..da418f724 --- /dev/null +++ b/.config/quickshell/services/WeatherService.qml @@ -0,0 +1,105 @@ +pragma Singleton +pragma ComponentBehavior: Bound + +import Quickshell +import Quickshell.Io +import QtQuick + +import "root:/modules/common" + +Singleton { + id: root + // 10 minute + readonly property int fetchInterval: ConfigOptions.bar.weather.fetchInterval * 60 * 1000 + property var data: ({ + uv: 0, + humidity: 0, + sunrise: 0, + sunset: 0, + windDir: 0, + wCode: 0, + city: 0, + wind: 0, + precip: 0, + visib: 0, + press: 0, + temp: 0 + }) + + function refineData(data) { + let temp = {}; + temp.uv = data?.current?.uvIndex || 0; + temp.humidity = (data?.current?.humidity || 0) + "%"; + temp.sunrise = data?.astronomy?.sunrise || "0.0"; + temp.sunset = data?.astronomy?.sunset || "0.0"; + temp.windDir = data?.current?.winddir16Point || "N"; + temp.wCode = data?.current?.weatherCode || "113"; + temp.city = data?.location?.areaName[0].value || "Istanbul"; + temp.temp = ""; + if (ConfigOptions.bar.weather.useUSCS) { + temp.wind = (data?.current?.windspeedMiles || 0) + " mph"; + temp.precip = (data?.current?.precipInches || 0) + " in"; + temp.visib = (data?.current?.visibilityMiles || 0) + " m"; + temp.press = (data?.current?.pressureInches || 0) + " psi"; + temp.temp += (data?.current?.temp_F || 0); + temp.temp += " (" + (data?.current?.FeelsLikeF || 0) + ") "; + temp.temp += "\u{02109}"; + } else { + temp.wind = (data?.current?.windspeedKmph || 0) + " km/h"; + temp.precip = (data?.current?.precipMM || 0) + " mm"; + temp.visib = (data?.current?.visibility || 0) + " km"; + temp.press = (data?.current?.pressure || 0) + " hPa"; + temp.temp += (data?.current?.temp_C || 0); + temp.temp += " (" + (data?.current?.FeelsLikeC || 0) + ") "; + temp.temp += "\u{02103}"; + } + root.data = temp; + } + + function getData() { + let command = "curl -s wttr.in"; + if (ConfigOptions.gps.active) { + command += `/${ConfigOptions.gps.latitude},${Config.gps.longitude}`; + } else { + command += `/${formatCityName(ConfigOptions.bar.weather.city)}`; + } + + // format as json + command += "?format=j1"; + command += " | "; + // only take the current weather, location, asytronmy data + command += "jq '{current: .current_condition[0], location: .nearest_area[0], astronomy: .weather[0].astronomy[0]}'"; + fetcher.command[2] = command; + fetcher.running = true; + } + + function formatCityName(cityName) { + return cityName.trim().split(/\s+/).join('+'); + } + + Process { + id: fetcher + command: ["bash", "-c", ""] + stdout: StdioCollector { + onStreamFinished: { + if (text.length === 0) + return; + try { + const parsedData = JSON.parse(text); + root.refineData(parsedData); + // console.info(`[ data: ${JSON.stringify(parsedData)}`); + } catch (e) { + console.error(`[WeatherService] ${e.message}`); + } + } + } + } + + Timer { + running: true + repeat: true + interval: root.fetchInterval + triggeredOnStart: true + onTriggered: root.getData() + } +} From d7cf0f4f27e85000c19f91f34782b439740857c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Sat, 28 Jun 2025 08:32:39 +0300 Subject: [PATCH 002/104] fix(WeatherBar): not using config fonts --- .../quickshell/modules/bar/weather/WeatherBar.qml | 2 +- .../quickshell/modules/bar/weather/WeatherCard.qml | 12 +++++------- .../quickshell/modules/bar/weather/WeatherPopup.qml | 5 +++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml index 58f68ab45..bcab6edcc 100644 --- a/.config/quickshell/modules/bar/weather/WeatherBar.qml +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -40,7 +40,7 @@ Item { StyledText { visible: true - font.pixelSize: Appearance.font.pixelSize.normal + font.pixelSize: Appearance.font.pixelSize.large color: Appearance.colors.colOnLayer1 text: WeatherService.data.temp } diff --git a/.config/quickshell/modules/bar/weather/WeatherCard.qml b/.config/quickshell/modules/bar/weather/WeatherCard.qml index 6910b2cc5..7b81fe543 100644 --- a/.config/quickshell/modules/bar/weather/WeatherCard.qml +++ b/.config/quickshell/modules/bar/weather/WeatherCard.qml @@ -6,10 +6,8 @@ import "root:/modules/common/widgets" Rectangle { id: root - radius: Appearance.rounding.verysmall + radius: Appearance.rounding.small color: Appearance.colors.colLayer1 - border.color: Appearance.colors.colShadow - border.width: 1 implicitWidth: columnLayout.implicitWidth * 2 implicitHeight: columnLayout.implicitHeight * 2 Layout.fillWidth: parent @@ -29,17 +27,17 @@ Rectangle { fill: 0 iconSize: Appearance.font.pixelSize.normal } - Text { + StyledText { id: title font.pixelSize: Appearance.font.pixelSize.smaller - color: Appearance.colors.colOnLayer2 + color: Appearance.colors.colOnLayer1 } } - Text { + StyledText { id: value Layout.alignment: Qt.AlignHCenter font.pixelSize: Appearance.font.pixelSize.normal - color: Appearance.colors.colOnLayer2 + color: Appearance.colors.colOnLayer1 } } } diff --git a/.config/quickshell/modules/bar/weather/WeatherPopup.qml b/.config/quickshell/modules/bar/weather/WeatherPopup.qml index 04f0c307a..931a0469a 100644 --- a/.config/quickshell/modules/bar/weather/WeatherPopup.qml +++ b/.config/quickshell/modules/bar/weather/WeatherPopup.qml @@ -35,9 +35,10 @@ Rectangle { iconSize: Appearance.font.pixelSize.huge } - Text { + StyledText { text: WeatherService.data.city - font.pixelSize: Appearance.font.pixelSize.large + font.pixelSize: Appearance.font.pixelSize.title + font.family: Appearance.font.family.title color: Appearance.colors.colOnLayer0 } } From 660af6e0183dc8ca168c399fc4c8c03d89aadc24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Sat, 28 Jun 2025 08:34:43 +0300 Subject: [PATCH 003/104] fix(modules/bar): WeatherBar pushing middlesection to the left --- .config/quickshell/modules/bar/Bar.qml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index 1eefb15d6..0923513a6 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -278,15 +278,17 @@ Scope { VerticalBarSeparator { visible: ConfigOptions?.bar.borderless } + } - // Weather - BarGroup { - id: weatherGroupContent - Layout.fillHeight: true - Layout.alignment: Qt.AlignVCenter - WeatherBar { - visible: ConfigOptions.bar.weather.show - } + // Weather + Loader { + id: weatherLoader + active: ConfigOptions.bar.weather.show + anchors.left: middleSection.right + anchors.margins: 10 + sourceComponent: BarGroup { + implicitHeight: barHeight + WeatherBar {} } } @@ -295,7 +297,7 @@ Scope { anchors.right: parent.right implicitHeight: barHeight - width: (barRoot.width - middleSection.width) / 2 + width: (barRoot.width - (barLeftSideMouseArea.width + middleSection.width + weatherLoader.width)) property bool hovered: false property real lastScrollX: 0 From bb456687a62ef90bfe042d22491bf0d1be87ea72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Sat, 28 Jun 2025 08:35:22 +0300 Subject: [PATCH 004/104] feat(settings): add weather section --- .../quickshell/modules/common/ConfigOptions.qml | 2 +- .../modules/settings/ServicesConfig.qml | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.config/quickshell/modules/common/ConfigOptions.qml b/.config/quickshell/modules/common/ConfigOptions.qml index ad5395743..f4d40abbe 100644 --- a/.config/quickshell/modules/common/ConfigOptions.qml +++ b/.config/quickshell/modules/common/ConfigOptions.qml @@ -73,7 +73,7 @@ Singleton { property int showNumberDelay: 300 // milliseconds } property QtObject weather: QtObject { - property bool show: true + property bool show: false // for specific location checkout gps setting property string city: "Istanbul" // use uscs units diff --git a/.config/quickshell/modules/settings/ServicesConfig.qml b/.config/quickshell/modules/settings/ServicesConfig.qml index 1be540363..b77c086f6 100644 --- a/.config/quickshell/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/modules/settings/ServicesConfig.qml @@ -136,4 +136,17 @@ ContentPage { } } -} \ No newline at end of file + ContentSubsection { + title: "Weather" + ConfigRow { + uniform: false + ConfigSwitch { + text: "Show" + checked: ConfigOptions.bar.weather.show + onCheckedChanged: { + ConfigLoader.setConfigValueAndSave("bar.weather.show", checked); + } + } + } + } +} From 9404b21f82788de087eba7e4cc6d465f0ee99704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Sat, 28 Jun 2025 16:58:54 +0300 Subject: [PATCH 005/104] config(hyprland): fix invalid geoclue agent path --- .config/hypr/hyprland/execs.conf | 2 +- .../hyprland/scripts/start_geoclue_agent.sh | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100755 .config/hypr/hyprland/scripts/start_geoclue_agent.sh diff --git a/.config/hypr/hyprland/execs.conf b/.config/hypr/hyprland/execs.conf index d4945605b..9d4747a90 100644 --- a/.config/hypr/hyprland/execs.conf +++ b/.config/hypr/hyprland/execs.conf @@ -1,7 +1,7 @@ # Bar, wallpaper exec-once = swww-daemon --format xrgb --no-cache exec-once = sleep 0.5; swww img "$(cat ~/.local/state/quickshell/user/generated/wallpaper/path.txt)" --transition-step 100 --transition-fps 120 --transition-type grow --transition-angle 30 --transition-duration 1 -exec-once = /usr/lib/geoclue-2.0/demos/agent & gammastep +exec-once = ~/.config/hypr/hyprland/scripts/start_geoclue_agent.sh & gammastep exec-once = qs & # Input method diff --git a/.config/hypr/hyprland/scripts/start_geoclue_agent.sh b/.config/hypr/hyprland/scripts/start_geoclue_agent.sh new file mode 100755 index 000000000..e464d0531 --- /dev/null +++ b/.config/hypr/hyprland/scripts/start_geoclue_agent.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# Check if GeoClue agent is already running +if pgrep -f 'geoclue-2.0/demos/agent' > /dev/null; then + echo "GeoClue agent is already running." + exit 0 +fi + +# List of known possible GeoClue agent paths +AGENT_PATHS=" +/usr/libexec/geoclue-2.0/demos/agent +/usr/lib/geoclue-2.0/demos/agent +" + +# Find the first valid agent path +for path in $AGENT_PATHS; do + if [ -x "$path" ]; then + echo "Starting GeoClue agent from: $path" + "$path" & # starts in the background + exit 0 + fi +done + +# If we got here, none of the paths worked +echo "GeoClue agent not found in known paths." +echo "Please install GeoClue or update the script with the correct path." +exit 1 From d8f5471b3e6930b768df42e1889ebc71d9fab491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Sat, 28 Jun 2025 20:25:36 +0300 Subject: [PATCH 006/104] config(WeatherService): add enableGps option --- .config/quickshell/modules/common/ConfigOptions.qml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/.config/quickshell/modules/common/ConfigOptions.qml b/.config/quickshell/modules/common/ConfigOptions.qml index f4d40abbe..c96a7a9b0 100644 --- a/.config/quickshell/modules/common/ConfigOptions.qml +++ b/.config/quickshell/modules/common/ConfigOptions.qml @@ -73,8 +73,10 @@ Singleton { property int showNumberDelay: 300 // milliseconds } property QtObject weather: QtObject { - property bool show: false - // for specific location checkout gps setting + property bool show: true + // gps based location + property bool enableGPS: true + // use if 'enableGPS' is false property string city: "Istanbul" // use uscs units // by default use metric (SI) units @@ -171,11 +173,4 @@ Singleton { property QtObject hacks: QtObject { property int arbitraryRaceConditionDelay: 20 // milliseconds } - - // this is for weather and feature apis - property QtObject gps: QtObject { - property bool active: false - property real latitude: 41.27830580591624 - property real longitude: 28.730357071149154 - } } From 689f6c90e7cfdfe562fcf7df24f983b92e2a01ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Sat, 28 Jun 2025 20:48:34 +0300 Subject: [PATCH 007/104] feat(WeatherService): add geolocation service --- .../quickshell/services/WeatherService.qml | 61 +++++++++++++++++-- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/.config/quickshell/services/WeatherService.qml b/.config/quickshell/services/WeatherService.qml index da418f724..7f4bbee3b 100644 --- a/.config/quickshell/services/WeatherService.qml +++ b/.config/quickshell/services/WeatherService.qml @@ -4,6 +4,7 @@ pragma ComponentBehavior: Bound import Quickshell import Quickshell.Io import QtQuick +import QtPositioning import "root:/modules/common" @@ -11,6 +12,16 @@ Singleton { id: root // 10 minute readonly property int fetchInterval: ConfigOptions.bar.weather.fetchInterval * 60 * 1000 + readonly property string city: ConfigOptions.bar.weather.city + readonly property bool useUSCS: ConfigOptions.bar.weather.useUSCS + readonly property bool gpsActive: ConfigOptions.bar.weather.enableGPS + + property var location: ({ + valid: false, + lat: 0, + lon: 0, + }) + property var data: ({ uv: 0, humidity: 0, @@ -36,7 +47,7 @@ Singleton { temp.wCode = data?.current?.weatherCode || "113"; temp.city = data?.location?.areaName[0].value || "Istanbul"; temp.temp = ""; - if (ConfigOptions.bar.weather.useUSCS) { + if (root.useUSCS) { temp.wind = (data?.current?.windspeedMiles || 0) + " mph"; temp.precip = (data?.current?.precipInches || 0) + " in"; temp.visib = (data?.current?.visibilityMiles || 0) + " m"; @@ -58,10 +69,11 @@ Singleton { function getData() { let command = "curl -s wttr.in"; - if (ConfigOptions.gps.active) { - command += `/${ConfigOptions.gps.latitude},${Config.gps.longitude}`; + + if (root.gpsActive && root.location.valid) { + command += `/${root.location.lat},${root.location.long}`; } else { - command += `/${formatCityName(ConfigOptions.bar.weather.city)}`; + command += `/${formatCityName(root.city)}`; } // format as json @@ -77,6 +89,13 @@ Singleton { return cityName.trim().split(/\s+/).join('+'); } + Component.onCompleted: { + if(!root.gpsActive) return + + console.info("[WeatherService] Starting the GPS service.") + positionSource.start() + } + Process { id: fetcher command: ["bash", "-c", ""] @@ -95,11 +114,41 @@ Singleton { } } + PositionSource { + id: positionSource + updateInterval: root.fetchInterval + + onPositionChanged: { + // update the location if the given location is valid + // if it fails getting the location, use the last valid location + if (position.latitudeValid && position.longitudeValid) { + root.location.lat = position.coordinate.latitude; + root.location.long = position.coordinate.longitude; + root.location.valid = true + // console.info(`📍 Location: ${position.coordinate.latitude}, ${position.coordinate.longitude}`); + root.getData(); + // if can't get initialized with valid location deactivate the GPS + } else { + root.gpsActive = root.location.valid ? true : false + } + } + + onValidityChanged: { + if(!valid) { + positionSource.stop() + root.location.valid = false + root.gpsActive = false + Quickshell.execDetached(["bash", "-c", `notify-send WeatherService 'Failed to load the GPS service. Using the fallback method instead.'`]) + console.error("[WeatherService] Could not aquire a valid backend plugin.") + } + } + } + Timer { - running: true + running: !root.gpsActive repeat: true interval: root.fetchInterval - triggeredOnStart: true + triggeredOnStart: !root.gpsActive onTriggered: root.getData() } } From c17db4bfb1b4b7d47d95d18fdb652ff0a12aeef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Tue, 1 Jul 2025 05:20:41 +0300 Subject: [PATCH 008/104] Resolve conflicting merge issues --- .config/quickshell/modules/bar/Bar.qml | 7 +- .config/quickshell/modules/common/Config.qml | 12 ++ .../modules/common/ConfigOptions.qml | 176 ------------------ .../quickshell/services/WeatherService.qml | 44 ++--- 4 files changed, 38 insertions(+), 201 deletions(-) delete mode 100644 .config/quickshell/modules/common/ConfigOptions.qml diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index 94f7caf58..192dcb504 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -307,18 +307,19 @@ Scope { } VerticalBarSeparator { - visible: ConfigOptions?.bar.borderless + visible: Config.options.bar.borderless } } // Weather Loader { id: weatherLoader - active: ConfigOptions.bar.weather.show + active: Config.options.bar.weather.show anchors.left: middleSection.right anchors.margins: 10 sourceComponent: BarGroup { - implicitHeight: barHeight + implicitHeight: Appearance.sizes.baseBarHeight + height: Appearance.sizes.barHeight WeatherBar {} } } diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index dda2e97ee..5e7b9bb3f 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -122,6 +122,18 @@ Singleton { property bool alwaysShowNumbers: false property int showNumberDelay: 300 // milliseconds } + property JsonObject weather: JsonObject { + property bool show: true + // gps based location + property bool enableGPS: true + // use if 'enableGPS' is false + property string city: "Istanbul" + // use uscs units + // by default use metric (SI) units + property bool useUSCS: false + // in minutes + property int fetchInterval: 10 + } } property JsonObject battery: JsonObject { diff --git a/.config/quickshell/modules/common/ConfigOptions.qml b/.config/quickshell/modules/common/ConfigOptions.qml deleted file mode 100644 index c96a7a9b0..000000000 --- a/.config/quickshell/modules/common/ConfigOptions.qml +++ /dev/null @@ -1,176 +0,0 @@ -pragma Singleton -pragma ComponentBehavior: Bound -import QtQuick -import Quickshell - -Singleton { - property QtObject policies: QtObject { - property int ai: 1 // 0: No | 1: Yes | 2: Local - property int weeb: 1 // 0: No | 1: Open | 2: Closet - } - - property QtObject ai: QtObject { - property string systemPrompt: qsTr("Use casual tone. No user knowledge is to be assumed except basic Linux literacy. Be brief and concise: When explaining concepts, use bullet points (prefer minus sign (-) over asterisk (*)) and highlight keywords in bold to pinpoint the main concepts instead of long paragraphs. You are also encouraged to split your response with h2 headers, each header title beginning with an emoji, like `## 🐧 Linux`. When making changes to the user's config, you must get the config to know what values there are before setting.") - } - - property QtObject appearance: QtObject { - property int fakeScreenRounding: 2 // 0: None | 1: Always | 2: When not fullscreen - property bool transparency: false - property QtObject palette: QtObject { - property string type: "auto" // Allowed: auto, scheme-content, scheme-expressive, scheme-fidelity, scheme-fruit-salad, scheme-monochrome, scheme-neutral, scheme-rainbow, scheme-tonal-spot - } - } - - property QtObject audio: QtObject { - // Values in % - property QtObject protection: QtObject { - // Prevent sudden bangs - property bool enable: true - property real maxAllowedIncrease: 10 - property real maxAllowed: 90 // Realistically should already provide some protection when it's 99... - } - } - - property QtObject apps: QtObject { - property string bluetooth: "kcmshell6 kcm_bluetooth" - property string network: "plasmawindowed org.kde.plasma.networkmanagement" - property string networkEthernet: "kcmshell6 kcm_networkmanagement" - property string taskManager: "plasma-systemmonitor --page-name Processes" - property string terminal: "kitty -1" // This is only for shell actions - } - - property QtObject background: QtObject { - property bool fixedClockPosition: false - property real clockX: -500 - property real clockY: -500 - } - - property QtObject bar: QtObject { - property bool bottom: false // Instead of top - property bool borderless: false // true for no grouping of items - property string topLeftIcon: "spark" // Options: distro, spark - property bool showBackground: true - property bool verbose: true - property QtObject resources: QtObject { - property bool alwaysShowSwap: true - property bool alwaysShowCpu: false - } - property list screenList: [] // List of names, like "eDP-1", find out with 'hyprctl monitors' command - property QtObject utilButtons: QtObject { - property bool showScreenSnip: true - property bool showColorPicker: false - property bool showMicToggle: false - property bool showKeyboardToggle: true - property bool showDarkModeToggle: true - } - property QtObject tray: QtObject { - property bool monochromeIcons: true - } - property QtObject workspaces: QtObject { - property int shown: 10 - property bool showAppIcons: true - property bool alwaysShowNumbers: false - property int showNumberDelay: 300 // milliseconds - } - property QtObject weather: QtObject { - property bool show: true - // gps based location - property bool enableGPS: true - // use if 'enableGPS' is false - property string city: "Istanbul" - // use uscs units - // by default use metric (SI) units - property bool useUSCS: false - // in minutes - property int fetchInterval: 10 - } - } - - property QtObject battery: QtObject { - property int low: 20 - property int critical: 5 - property bool automaticSuspend: true - property int suspend: 3 - } - - property QtObject dock: QtObject { - property real height: 60 - property real hoverRegionHeight: 3 - property bool pinnedOnStartup: false - property bool hoverToReveal: false // When false, only reveals on empty workspace - property list pinnedApps: [ // IDs of pinned entries - "org.kde.dolphin", "kitty",] - } - - property QtObject language: QtObject { - property QtObject translator: QtObject { - property string engine: "auto" // Run `trans -list-engines` for available engines. auto should use google - property string targetLanguage: "auto" // Run `trans -list-all` for available languages - property string sourceLanguage: "auto" - } - } - - property QtObject networking: QtObject { - property string userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" - } - - property QtObject osd: QtObject { - property int timeout: 1000 - } - - property QtObject osk: QtObject { - property string layout: "qwerty_full" - property bool pinnedOnStartup: false - } - - property QtObject overview: QtObject { - property real scale: 0.18 // Relative to screen size - property real rows: 2 - property real columns: 5 - } - - property QtObject resources: QtObject { - property int updateInterval: 3000 - } - - property QtObject search: QtObject { - property int nonAppResultDelay: 30 // This prevents lagging when typing - property string engineBaseUrl: "https://www.google.com/search?q=" - property list excludedSites: ["quora.com"] - property bool sloppy: false // Uses levenshtein distance based scoring instead of fuzzy sort. Very weird. - property QtObject prefix: QtObject { - property string action: "/" - property string clipboard: ";" - property string emojis: ":" - } - } - - property QtObject sidebar: QtObject { - property QtObject translator: QtObject { - property int delay: 300 // Delay before sending request. Reduces (potential) rate limits and lag. - } - property QtObject booru: QtObject { - property bool allowNsfw: false - property string defaultProvider: "yandere" - property int limit: 20 - property QtObject zerochan: QtObject { - property string username: "[unset]" - } - } - } - - property QtObject time: QtObject { - // https://doc.qt.io/qt-6/qtime.html#toString - property string format: "hh:mm" - property string dateFormat: "dddd, dd/MM" - } - - property QtObject windows: QtObject { - property bool showTitlebar: true // Client-side decoration for shell apps - property bool centerTitle: true - } - - property QtObject hacks: QtObject { - property int arbitraryRaceConditionDelay: 20 // milliseconds - } -} diff --git a/.config/quickshell/services/WeatherService.qml b/.config/quickshell/services/WeatherService.qml index 7f4bbee3b..c4e8ac66f 100644 --- a/.config/quickshell/services/WeatherService.qml +++ b/.config/quickshell/services/WeatherService.qml @@ -11,15 +11,15 @@ import "root:/modules/common" Singleton { id: root // 10 minute - readonly property int fetchInterval: ConfigOptions.bar.weather.fetchInterval * 60 * 1000 - readonly property string city: ConfigOptions.bar.weather.city - readonly property bool useUSCS: ConfigOptions.bar.weather.useUSCS - readonly property bool gpsActive: ConfigOptions.bar.weather.enableGPS + readonly property int fetchInterval: Config.options.bar.weather.fetchInterval * 60 * 1000 + readonly property string city: Config.options.bar.weather.city + readonly property bool useUSCS: Config.options.bar.weather.useUSCS + readonly property bool gpsActive: Config.options.bar.weather.enableGPS property var location: ({ valid: false, lat: 0, - lon: 0, + lon: 0 }) property var data: ({ @@ -90,10 +90,10 @@ Singleton { } Component.onCompleted: { - if(!root.gpsActive) return - - console.info("[WeatherService] Starting the GPS service.") - positionSource.start() + if (!root.gpsActive) + return; + console.info("[WeatherService] Starting the GPS service."); + positionSource.start(); } Process { @@ -124,23 +124,23 @@ Singleton { if (position.latitudeValid && position.longitudeValid) { root.location.lat = position.coordinate.latitude; root.location.long = position.coordinate.longitude; - root.location.valid = true + root.location.valid = true; // console.info(`📍 Location: ${position.coordinate.latitude}, ${position.coordinate.longitude}`); root.getData(); - // if can't get initialized with valid location deactivate the GPS - } else { - root.gpsActive = root.location.valid ? true : false - } + // if can't get initialized with valid location deactivate the GPS + } else { + root.gpsActive = root.location.valid ? true : false; + } } onValidityChanged: { - if(!valid) { - positionSource.stop() - root.location.valid = false - root.gpsActive = false - Quickshell.execDetached(["bash", "-c", `notify-send WeatherService 'Failed to load the GPS service. Using the fallback method instead.'`]) - console.error("[WeatherService] Could not aquire a valid backend plugin.") - } + if (!valid) { + positionSource.stop(); + root.location.valid = false; + root.gpsActive = false; + Quickshell.execDetached(["bash", "-c", `notify-send WeatherService 'Failed to load the GPS service. Using the fallback method instead.'`]); + console.error("[WeatherService] Could not aquire a valid backend plugin."); + } } } @@ -148,7 +148,7 @@ Singleton { running: !root.gpsActive repeat: true interval: root.fetchInterval - triggeredOnStart: !root.gpsActive + triggeredOnStart: !root.gpsActive onTriggered: root.getData() } } From fd873ff7c1cd276f83935d8a334763e885177c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Tue, 1 Jul 2025 05:29:10 +0300 Subject: [PATCH 009/104] fix(): WeatherBar pushing MiddleSection to the left --- .config/quickshell/modules/bar/Bar.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index 192dcb504..b88a89476 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -330,7 +330,7 @@ Scope { anchors.right: parent.right implicitHeight: Appearance.sizes.baseBarHeight height: Appearance.sizes.barHeight - width: (barRoot.width - middleSection.width) / 2 + width: barRoot.width - (barLeftSideMouseArea.width + middleSection.width + weatherLoader.width) property bool hovered: false property real lastScrollX: 0 From 67c75b1cce495256edfc3bc45f78583b7f721da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Tue, 1 Jul 2025 05:42:50 +0300 Subject: [PATCH 010/104] fix(ServiceConfig): add weatherbar section --- .../modules/settings/ServicesConfig.qml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.config/quickshell/modules/settings/ServicesConfig.qml b/.config/quickshell/modules/settings/ServicesConfig.qml index ecd7efa89..21064ac91 100644 --- a/.config/quickshell/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/modules/settings/ServicesConfig.qml @@ -138,16 +138,13 @@ ContentPage { } } - ContentSubsection { + ContentSection { title: "Weather" - ConfigRow { - uniform: false - ConfigSwitch { - text: "Show" - checked: ConfigOptions.bar.weather.show - onCheckedChanged: { - ConfigLoader.setConfigValueAndSave("bar.weather.show", checked); - } + ConfigSwitch { + text: "Show" + checked: Config.options.bar.weather.show + onCheckedChanged: { + Config.options.bar.weather.show = checked; } } } From b982c788fe25744897bc403e38d0ef4b98ba587d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Tue, 1 Jul 2025 07:11:06 +0300 Subject: [PATCH 011/104] style(WeatherPopup): remove the border --- .config/quickshell/modules/bar/weather/WeatherPopup.qml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.config/quickshell/modules/bar/weather/WeatherPopup.qml b/.config/quickshell/modules/bar/weather/WeatherPopup.qml index 931a0469a..0829bea9e 100644 --- a/.config/quickshell/modules/bar/weather/WeatherPopup.qml +++ b/.config/quickshell/modules/bar/weather/WeatherPopup.qml @@ -11,10 +11,8 @@ Rectangle { implicitWidth: columnLayout.implicitWidth + margin * 2 implicitHeight: columnLayout.implicitHeight + margin * 2 color: Appearance.colors.colLayer0 - radius: 12 + radius: Appearance.rounding.small clip: true - border.color: Appearance.colors.colShadow - border.width: 1 ColumnLayout { id: columnLayout From c94231365ffee129613949557b6e4a6e19c4d1ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Tue, 1 Jul 2025 12:57:14 +0300 Subject: [PATCH 012/104] chore(WeatherService): rename to `Weather` --- .../modules/bar/weather/WeatherBar.qml | 4 ++-- .../modules/bar/weather/WeatherPopup.qml | 18 +++++++++--------- .../{WeatherService.qml => Weather.qml} | 0 3 files changed, 11 insertions(+), 11 deletions(-) rename .config/quickshell/services/{WeatherService.qml => Weather.qml} (100%) diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml index bcab6edcc..b879646ce 100644 --- a/.config/quickshell/modules/bar/weather/WeatherBar.qml +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -33,7 +33,7 @@ Item { MaterialSymbol { fill: 0 - text: WeatherIcons.codeToName[WeatherService.data.wCode] + text: WeatherIcons.codeToName[Weather.data.wCode] iconSize: Appearance.font.pixelSize.large color: Appearance.colors.colOnLayer1 } @@ -42,7 +42,7 @@ Item { visible: true font.pixelSize: Appearance.font.pixelSize.large color: Appearance.colors.colOnLayer1 - text: WeatherService.data.temp + text: Weather.data.temp } } } diff --git a/.config/quickshell/modules/bar/weather/WeatherPopup.qml b/.config/quickshell/modules/bar/weather/WeatherPopup.qml index 0829bea9e..cda627455 100644 --- a/.config/quickshell/modules/bar/weather/WeatherPopup.qml +++ b/.config/quickshell/modules/bar/weather/WeatherPopup.qml @@ -34,7 +34,7 @@ Rectangle { } StyledText { - text: WeatherService.data.city + text: Weather.data.city font.pixelSize: Appearance.font.pixelSize.title font.family: Appearance.font.family.title color: Appearance.colors.colOnLayer0 @@ -52,42 +52,42 @@ Rectangle { WeatherCard { title: "UV Index" symbol: "wb_sunny" - value: WeatherService.data.uv + value: Weather.data.uv } WeatherCard { title: "Wind" symbol: "air" - value: `(${WeatherService.data.windDir}) ${WeatherService.data.wind}` + value: `(${Weather.data.windDir}) ${Weather.data.wind}` } WeatherCard { title: "Precipitation" symbol: "rainy_light" - value: WeatherService.data.precip + value: Weather.data.precip } WeatherCard { title: "Humidity" symbol: "humidity_low" - value: WeatherService.data.humidity + value: Weather.data.humidity } WeatherCard { title: "Visibility" symbol: "visibility" - value: WeatherService.data.visib + value: Weather.data.visib } WeatherCard { title: "Pressure" symbol: "readiness_score" - value: WeatherService.data.press + value: Weather.data.press } WeatherCard { title: "Sunrise" symbol: "wb_twilight" - value: WeatherService.data.sunrise + value: Weather.data.sunrise } WeatherCard { title: "Sunset" symbol: "bedtime" - value: WeatherService.data.sunset + value: Weather.data.sunset } } } diff --git a/.config/quickshell/services/WeatherService.qml b/.config/quickshell/services/Weather.qml similarity index 100% rename from .config/quickshell/services/WeatherService.qml rename to .config/quickshell/services/Weather.qml From 50cc371100bae79527c439514cc18886e7ec6ea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Tue, 1 Jul 2025 13:19:24 +0300 Subject: [PATCH 013/104] chor(Weather): rename `show` to `enable` --- .config/quickshell/modules/bar/Bar.qml | 2 +- .config/quickshell/modules/common/Config.qml | 4 ++-- .config/quickshell/modules/settings/ServicesConfig.qml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index b88a89476..ce4a614ec 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -314,7 +314,7 @@ Scope { // Weather Loader { id: weatherLoader - active: Config.options.bar.weather.show + active: Config.options.bar.weather.enable anchors.left: middleSection.right anchors.margins: 10 sourceComponent: BarGroup { diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index 5e7b9bb3f..6df375828 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -123,11 +123,11 @@ Singleton { property int showNumberDelay: 300 // milliseconds } property JsonObject weather: JsonObject { - property bool show: true + property bool enable: true // gps based location property bool enableGPS: true // use if 'enableGPS' is false - property string city: "Istanbul" + property string city: "" // use uscs units // by default use metric (SI) units property bool useUSCS: false diff --git a/.config/quickshell/modules/settings/ServicesConfig.qml b/.config/quickshell/modules/settings/ServicesConfig.qml index 21064ac91..97d80a18a 100644 --- a/.config/quickshell/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/modules/settings/ServicesConfig.qml @@ -141,10 +141,10 @@ ContentPage { ContentSection { title: "Weather" ConfigSwitch { - text: "Show" - checked: Config.options.bar.weather.show + text: "enable" + checked: Config.options.bar.weather.enable onCheckedChanged: { - Config.options.bar.weather.show = checked; + Config.options.bar.weather.enable = checked; } } } From fd6af822cd70bac253387892359c7f6a64fdbd98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Tue, 1 Jul 2025 13:42:54 +0300 Subject: [PATCH 014/104] chore(Weather): make things more clear --- .config/quickshell/services/Weather.qml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.config/quickshell/services/Weather.qml b/.config/quickshell/services/Weather.qml index c4e8ac66f..e95453fdc 100644 --- a/.config/quickshell/services/Weather.qml +++ b/.config/quickshell/services/Weather.qml @@ -14,7 +14,7 @@ Singleton { readonly property int fetchInterval: Config.options.bar.weather.fetchInterval * 60 * 1000 readonly property string city: Config.options.bar.weather.city readonly property bool useUSCS: Config.options.bar.weather.useUSCS - readonly property bool gpsActive: Config.options.bar.weather.enableGPS + property bool gpsActive: Config.options.bar.weather.enableGPS property var location: ({ valid: false, @@ -130,15 +130,16 @@ Singleton { // if can't get initialized with valid location deactivate the GPS } else { root.gpsActive = root.location.valid ? true : false; + console.error("[WeatherService] Failed to get the GPS location."); } } onValidityChanged: { - if (!valid) { + if (!positionSource.valid) { positionSource.stop(); root.location.valid = false; root.gpsActive = false; - Quickshell.execDetached(["bash", "-c", `notify-send WeatherService 'Failed to load the GPS service. Using the fallback method instead.'`]); + Quickshell.execDetached(["bash", "-c", `notify-send WeatherService 'Can not find a GPS service. Using the fallback method instead.'`]); console.error("[WeatherService] Could not aquire a valid backend plugin."); } } From 2684bbae69a2b722f2b9f349da74afc5af24d549 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:52:24 +0300 Subject: [PATCH 015/104] refactor(WeatherBar): put in `barRightSide` --- .config/quickshell/modules/bar/Bar.qml | 41 +++++++++---------- .../modules/bar/weather/WeatherBar.qml | 7 ++-- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index ce4a614ec..1785e3179 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -85,7 +85,7 @@ Scope { } } } - + // Background shadow Loader { active: showBarBackground && Config.options.bar.cornerStyle === 1 @@ -105,7 +105,7 @@ Scope { color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" radius: Config.options.bar.cornerStyle === 1 ? Appearance.rounding.windowRounding : 0 } - + MouseArea { // Left side | scroll to change brightness id: barLeftSideMouseArea anchors.left: parent.left @@ -203,8 +203,7 @@ Scope { anchors.centerIn: parent width: 19.5 height: 19.5 - source: Config.options.bar.topLeftIcon == 'distro' ? - SystemInfo.distroIcon : "spark-symbolic" + source: Config.options.bar.topLeftIcon == 'distro' ? SystemInfo.distroIcon : "spark-symbolic" } ColorOverlay { @@ -246,7 +245,9 @@ Scope { } } - VerticalBarSeparator {visible: Config.options?.bar.borderless} + VerticalBarSeparator { + visible: Config.options?.bar.borderless + } BarGroup { id: middleCenterGroup @@ -271,7 +272,9 @@ Scope { } } - VerticalBarSeparator {visible: Config.options?.bar.borderless} + VerticalBarSeparator { + visible: Config.options?.bar.borderless + } MouseArea { id: rightCenterGroup @@ -307,20 +310,7 @@ Scope { } VerticalBarSeparator { - visible: Config.options.bar.borderless - } - } - - // Weather - Loader { - id: weatherLoader - active: Config.options.bar.weather.enable - anchors.left: middleSection.right - anchors.margins: 10 - sourceComponent: BarGroup { - implicitHeight: Appearance.sizes.baseBarHeight - height: Appearance.sizes.barHeight - WeatherBar {} + visible: Config.options.bar.borderless && Config.options.bar.weather.enable } } @@ -330,7 +320,7 @@ Scope { anchors.right: parent.right implicitHeight: Appearance.sizes.baseBarHeight height: Appearance.sizes.barHeight - width: barRoot.width - (barLeftSideMouseArea.width + middleSection.width + weatherLoader.width) + width: (barRoot.width - middleSection.width) / 2 property bool hovered: false property real lastScrollX: 0 @@ -493,6 +483,15 @@ Scope { Item { Layout.fillWidth: true Layout.fillHeight: true + + // Weather + Loader { + active: Config.options.bar.weather.enable + sourceComponent: BarGroup { + implicitHeight: Appearance.sizes.baseBarHeight + WeatherBar {} + } + } } } } diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml index b879646ce..c0fda9641 100644 --- a/.config/quickshell/modules/bar/weather/WeatherBar.qml +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -9,8 +9,8 @@ import QtQuick.Layouts Item { id: root - property real margin: 5 - implicitHeight: 32 + property real margin: 10 + implicitHeight: mouseArea.implicitHeight implicitWidth: mouseArea.implicitWidth + margin * 2 MouseArea { @@ -30,12 +30,12 @@ Item { RowLayout { id: rowLayout - MaterialSymbol { fill: 0 text: WeatherIcons.codeToName[Weather.data.wCode] iconSize: Appearance.font.pixelSize.large color: Appearance.colors.colOnLayer1 + Layout.alignment: Qt.AlignVCenter } StyledText { @@ -43,6 +43,7 @@ Item { font.pixelSize: Appearance.font.pixelSize.large color: Appearance.colors.colOnLayer1 text: Weather.data.temp + Layout.alignment: Qt.AlignVCenter } } } From 8b83b42eed0070f0bb96658f188058c0e63b5d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hasan=20A=2E=20Tekeo=C4=9Flu?= <55619655+tekeoglan@users.noreply.github.com> Date: Thu, 3 Jul 2025 10:00:08 +0300 Subject: [PATCH 016/104] chore(Weather): use generic city name for default value --- .config/quickshell/services/Weather.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/services/Weather.qml b/.config/quickshell/services/Weather.qml index e95453fdc..eb1a00af4 100644 --- a/.config/quickshell/services/Weather.qml +++ b/.config/quickshell/services/Weather.qml @@ -45,7 +45,7 @@ Singleton { temp.sunset = data?.astronomy?.sunset || "0.0"; temp.windDir = data?.current?.winddir16Point || "N"; temp.wCode = data?.current?.weatherCode || "113"; - temp.city = data?.location?.areaName[0].value || "Istanbul"; + temp.city = data?.location?.areaName[0]?.value || "City"; temp.temp = ""; if (root.useUSCS) { temp.wind = (data?.current?.windspeedMiles || 0) + " mph"; From e99f51e6accc3cbe4bc4c2f68b8b88c3bd7d9d9e Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 3 Jul 2025 22:56:05 +0200 Subject: [PATCH 017/104] media: fix space at start of track title --- .config/quickshell/modules/common/functions/string_utils.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.config/quickshell/modules/common/functions/string_utils.js b/.config/quickshell/modules/common/functions/string_utils.js index c22671ebf..0819dbfb9 100644 --- a/.config/quickshell/modules/common/functions/string_utils.js +++ b/.config/quickshell/modules/common/functions/string_utils.js @@ -158,10 +158,10 @@ function cleanMusicTitle(title) { // Japenis brackets title = title.replace(/^ *【[^】]*】/, "") // Touhou title = title.replace(/^ *《[^》]*》/, "") // ?? - title = title.replace(/^ *「[^」]*」/, "") // OP/ED - title = title.replace(/^ *『[^』]*』/, "") // OP/ED + title = title.replace(/^ *「[^」]*」/, "") // OP/ED thingie + title = title.replace(/^ *『[^』]*』/, "") // OP/ED thingie - return title; + return title.trim(); } function friendlyTimeForSeconds(seconds) { From 089468393e64ddd126d9266683c1d9ca107cfb27 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 3 Jul 2025 22:56:23 +0200 Subject: [PATCH 018/104] notifs: discard notif on action invocation --- .config/quickshell/services/Notifications.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/services/Notifications.qml b/.config/quickshell/services/Notifications.qml index 6f04b7cd6..7438983f4 100644 --- a/.config/quickshell/services/Notifications.qml +++ b/.config/quickshell/services/Notifications.qml @@ -219,8 +219,8 @@ Singleton { } else { console.log("Notification not found in server: " + id) - root.discardNotification(id); } + root.discardNotification(id); } function triggerListChange() { From 85a9a08b43dea67ee416e9558269389da55fa8cd Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 3 Jul 2025 22:56:45 +0200 Subject: [PATCH 019/104] settings: add dock options --- .../modules/settings/InterfaceConfig.qml | 92 +++++++++++++++---- 1 file changed, 75 insertions(+), 17 deletions(-) diff --git a/.config/quickshell/modules/settings/InterfaceConfig.qml b/.config/quickshell/modules/settings/InterfaceConfig.qml index 0f63ea417..29fd21d11 100644 --- a/.config/quickshell/modules/settings/InterfaceConfig.qml +++ b/.config/quickshell/modules/settings/InterfaceConfig.qml @@ -11,38 +11,58 @@ ContentPage { title: "Policies" ConfigRow { - ColumnLayout { // Weeb policy + ColumnLayout { + // Weeb policy ContentSubsectionLabel { text: "Weeb" } ConfigSelectionArray { currentValue: Config.options.policies.weeb configOptionName: "policies.weeb" - onSelected: (newValue) => { + onSelected: newValue => { Config.options.policies.weeb = newValue; } options: [ - { displayName: "No", value: 0 }, - { displayName: "Yes", value: 1 }, - { displayName: "Closet", value: 2 } + { + displayName: "No", + value: 0 + }, + { + displayName: "Yes", + value: 1 + }, + { + displayName: "Closet", + value: 2 + } ] } } - ColumnLayout { // AI policy + ColumnLayout { + // AI policy ContentSubsectionLabel { text: "AI" } ConfigSelectionArray { currentValue: Config.options.policies.ai configOptionName: "policies.ai" - onSelected: (newValue) => { + onSelected: newValue => { Config.options.policies.ai = newValue; } options: [ - { displayName: "No", value: 0 }, - { displayName: "Yes", value: 1 }, - { displayName: "Local only", value: 2 } + { + displayName: "No", + value: 0 + }, + { + displayName: "Yes", + value: 1 + }, + { + displayName: "Local only", + value: 2 + } ] } } @@ -55,13 +75,22 @@ ContentPage { ConfigSelectionArray { currentValue: Config.options.bar.cornerStyle configOptionName: "bar.cornerStyle" - onSelected: (newValue) => { + onSelected: newValue => { Config.options.bar.cornerStyle = newValue; } options: [ - { displayName: "Hug", value: 0 }, - { displayName: "Float", value: 1 }, - { displayName: "Plain rectangle", value: 2 } + { + displayName: "Hug", + value: 0 + }, + { + displayName: "Float", + value: 1 + }, + { + displayName: "Plain rectangle", + value: 2 + } ] } @@ -182,7 +211,7 @@ ContentPage { Config.options.bar.workspaces.showNumberDelay = value; } } - } + } } ContentSection { @@ -236,6 +265,36 @@ ContentPage { } } + ContentSection { + title: "Dock" + + ConfigSwitch { + text: "Enable" + checked: Config.options.dock.enable + onCheckedChanged: { + Config.options.dock.enable = checked; + } + } + + ConfigRow { + uniform: true + ConfigSwitch { + text: "Hover to reveal" + checked: Config.options.dock.hoverToReveal + onCheckedChanged: { + Config.options.dock.hoverToReveal = checked; + } + } + ConfigSwitch { + text: "Pinned on startup" + checked: Config.options.dock.pinnedOnStartup + onCheckedChanged: { + Config.options.dock.pinnedOnStartup = checked; + } + } + } + } + ContentSection { title: "Overview" ConfigSpinBox { @@ -271,6 +330,5 @@ ContentPage { } } } - } -} \ No newline at end of file +} From 746c5805fb4d30cea16d2daf732c4fd629efc5a5 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 3 Jul 2025 23:04:00 +0200 Subject: [PATCH 020/104] Update Config.qml --- .config/quickshell/modules/common/Config.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index 09313be8e..016b39324 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -134,7 +134,7 @@ Singleton { property JsonObject dock: JsonObject { property bool enable: false property real height: 60 - property real hoverRegionHeight: 3 + property real hoverRegionHeight: 2 property bool pinnedOnStartup: false property bool hoverToReveal: true // When false, only reveals on empty workspace property list pinnedApps: [ // IDs of pinned entries From 11dcffb95dc88a9e94483e1e6e6c3bd4f6966b41 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 3 Jul 2025 23:04:41 +0200 Subject: [PATCH 021/104] overview: only show windows in same monitor as widget --- .config/quickshell/modules/overview/OverviewWidget.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.config/quickshell/modules/overview/OverviewWidget.qml b/.config/quickshell/modules/overview/OverviewWidget.qml index c6da607dc..9a7b64051 100644 --- a/.config/quickshell/modules/overview/OverviewWidget.qml +++ b/.config/quickshell/modules/overview/OverviewWidget.qml @@ -148,9 +148,10 @@ Item { // console.log(JSON.stringify(ToplevelManager.toplevels.values.map(t => t), null, 2)) return ToplevelManager.toplevels.values.filter((toplevel) => { const address = `0x${toplevel.HyprlandToplevel.address}` - // console.log(`Checking window with address: ${address}`) var win = windowByAddress[address] - return (root.workspaceGroup * root.workspacesShown < win?.workspace?.id && win?.workspace?.id <= (root.workspaceGroup + 1) * root.workspacesShown) + const inWorkspaceGroup = (root.workspaceGroup * root.workspacesShown < win?.workspace?.id && win?.workspace?.id <= (root.workspaceGroup + 1) * root.workspacesShown) + const inMonitor = root.monitor.id === win.monitor + return inWorkspaceGroup && inMonitor; }) } } From c7519f338e0b169b0591616dc3cb615e2e5f472b Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 4 Jul 2025 16:58:44 +0200 Subject: [PATCH 022/104] add logo (closes #1436) --- .config/quickshell/modules/settings/About.qml | 9 +- .local/share/icons/illogical-impulse.svg | 124 ++++++++++++++++++ install.sh | 1 + 3 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 .local/share/icons/illogical-impulse.svg diff --git a/.config/quickshell/modules/settings/About.qml b/.config/quickshell/modules/settings/About.qml index 7868c0e7b..dc1c93d70 100644 --- a/.config/quickshell/modules/settings/About.qml +++ b/.config/quickshell/modules/settings/About.qml @@ -20,7 +20,7 @@ ContentPage { Layout.topMargin: 10 Layout.bottomMargin: 10 IconImage { - implicitSize: 100 + implicitSize: 80 source: Quickshell.iconPath(SystemInfo.logo) } ColumnLayout { @@ -87,10 +87,9 @@ ContentPage { spacing: 20 Layout.topMargin: 10 Layout.bottomMargin: 10 - MaterialSymbol { - iconSize: 70 - text: "files" - color: Appearance.colors.colOnSecondaryContainer + IconImage { + implicitSize: 80 + source: Quickshell.iconPath("illogical-impulse") } ColumnLayout { Layout.alignment: Qt.AlignVCenter diff --git a/.local/share/icons/illogical-impulse.svg b/.local/share/icons/illogical-impulse.svg new file mode 100644 index 000000000..8b1b789c9 --- /dev/null +++ b/.local/share/icons/illogical-impulse.svg @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install.sh b/install.sh index a123a7a97..2134e767b 100755 --- a/install.sh +++ b/install.sh @@ -233,6 +233,7 @@ esac # some foldes (eg. .local/bin) should be processed separately to avoid `--delete' for rsync, # since the files here come from different places, not only about one program. # v rsync -av ".local/bin/" "$XDG_BIN_HOME" # No longer needed since scripts are no longer in ~/.local/bin +v rsync -av ".local/share/icons/" "${XDG_DATA_HOME:-$HOME/.local/share}"/icons/ # Prevent hyprland from not fully loaded sleep 1 From 3a9189a9941a0eae4bedc88a3afdbe1bf9e209dd Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:00:43 +0200 Subject: [PATCH 023/104] readme: remove "pls logo ideas" --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index e381b1251..a40a56869 100644 --- a/README.md +++ b/README.md @@ -64,12 +64,6 @@ - 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 2f03ce5f06abc6b5c37b599ae9527a55aaad9440 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:03:27 +0200 Subject: [PATCH 024/104] symlink quickshell to illogical impulse icon remove this if quickshell gets its icon bundled later --- .local/share/icons/quickshell.svg | 1 + 1 file changed, 1 insertion(+) create mode 120000 .local/share/icons/quickshell.svg diff --git a/.local/share/icons/quickshell.svg b/.local/share/icons/quickshell.svg new file mode 120000 index 000000000..8dc05d01c --- /dev/null +++ b/.local/share/icons/quickshell.svg @@ -0,0 +1 @@ +illogical-impulse.svg \ No newline at end of file From 83a7581a349cf6d52c1ff83383aa55bcf5f99e44 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:20:33 +0200 Subject: [PATCH 025/104] icon guess: fix steam regex --- .config/quickshell/services/AppSearch.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.config/quickshell/services/AppSearch.qml b/.config/quickshell/services/AppSearch.qml index edac48007..e325f93f3 100644 --- a/.config/quickshell/services/AppSearch.qml +++ b/.config/quickshell/services/AppSearch.qml @@ -27,7 +27,7 @@ Singleton { }) property var regexSubstitutions: [ { - "regex": /^steam_app_(\\d+)$/, + "regex": /^steam_app_(\d+)$/, "replace": "steam_icon_$1" }, { @@ -72,6 +72,7 @@ Singleton { } function iconExists(iconName) { + if (!iconName || iconName.length == 0) return false; return (Quickshell.iconPath(iconName, true).length > 0) && !iconName.includes("image-missing"); } @@ -103,7 +104,7 @@ Singleton { // Guess: normalize to kebab case guessStr = str.toLowerCase().replace(/\s+/g, "-"); if (iconExists(guessStr)) return guessStr; - // Guess: First fuzze desktop entry match + // Guess: First fuzzy desktop entry match const searchResults = root.fuzzyQuery(str); if (searchResults.length > 0) { const firstEntry = searchResults[0]; From 1fb0e8b32b8073ed6d84a032c796fdb384b04e57 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:51:12 +0200 Subject: [PATCH 026/104] add breeze --- 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 12a7209be..a6f69c334 100644 --- a/arch-packages/illogical-impulse-fonts-themes/PKGBUILD +++ b/arch-packages/illogical-impulse-fonts-themes/PKGBUILD @@ -6,6 +6,7 @@ arch=(any) license=(None) depends=( adw-gtk-theme-git + breeze breeze-plus eza fish From 7d2856e9b7aea2fcc76c03504638aca9bab9ca6c Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:54:15 +0200 Subject: [PATCH 027/104] deps: add darkly qt style --- 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 a6f69c334..8c5f567c9 100644 --- a/arch-packages/illogical-impulse-fonts-themes/PKGBUILD +++ b/arch-packages/illogical-impulse-fonts-themes/PKGBUILD @@ -8,6 +8,7 @@ depends=( adw-gtk-theme-git breeze breeze-plus + darkly-bin eza fish fontconfig From e78b84cd41cd94f8bbe67817b241044d8eb07f44 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 4 Jul 2025 20:02:44 +0200 Subject: [PATCH 028/104] bar: monochrome icons --- .config/quickshell/modules/bar/Workspaces.qml | 20 +++++++++++++++++++ .config/quickshell/modules/common/Config.qml | 1 + 2 files changed, 21 insertions(+) diff --git a/.config/quickshell/modules/bar/Workspaces.qml b/.config/quickshell/modules/bar/Workspaces.qml index 060113707..cd32cd325 100644 --- a/.config/quickshell/modules/bar/Workspaces.qml +++ b/.config/quickshell/modules/bar/Workspaces.qml @@ -206,6 +206,7 @@ Item { } } Rectangle { // Dot instead of ws number + id: wsDot opacity: (Config.options?.bar.workspaces.alwaysShowNumbers || GlobalStates.workspaceShowNumbers || (Config.options?.bar.workspaces.showAppIcons && workspaceButtonBackground.biggestWindow) @@ -257,6 +258,25 @@ Item { 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: 1 + } + ColorOverlay { + anchors.fill: desaturatedIcon + source: desaturatedIcon + color: ColorUtils.transparentize(wsDot.color, 0.6) + } + } + } } } diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index 016b39324..76b45df10 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -117,6 +117,7 @@ Singleton { property bool monochromeIcons: true } property JsonObject workspaces: JsonObject { + property bool monochromeIcons: true property int shown: 10 property bool showAppIcons: true property bool alwaysShowNumbers: false From cf205816031b3adf782983d57e1269c345e6cf0c Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:18:38 +0200 Subject: [PATCH 029/104] Update README.md --- README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a40a56869..21a92ab5d 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,11 @@

-## illogical-impulseQuickshell + + +### Quickshell | AI | Common widgets | |:---|:---------------| @@ -82,7 +86,7 @@ By the way... - The funny notification positions are mimicking Android 16's dragging behavior - The clock on the wallpaper is automatically placed at the "least busy" region of the image -## illogical-impulseAGS (Deprecated) +### AGS | AI | Common widgets | |:---|:---------------| @@ -90,28 +94,28 @@ By the way... | Window management | Weeb power | | ![image](https://github.com/user-attachments/assets/02983b9b-79ba-4c25-8717-90bef2357ae5) | ![image](https://github.com/user-attachments/assets/bbb332ec-962a-4e88-a95b-486d0bd8ce76) | -## Unsupported stuff +### Unsupported stuff - The pics are here mainly for your viewing pleasure - The files are still available, feel free to grab them from the [`archive`](https://github.com/end-4/dots-hyprland/tree/archive) branch if you're willing to see some spaghetti and troubleshoot - Click image for a presentation video -### [m3ww](https://github.com/end-4/dots-hyprland/tree/archive) +#### m3ww Material Eww! -### [NovelKnock](https://github.com/end-4/dots-hyprland/tree/archive) +#### NovelKnock Desktop Preview -### [Hybrid](https://github.com/end-4/dots-hyprland/tree/archive) +#### Hybrid click the circles! -### [Windoes](https://github.com/end-4/dots-hyprland/tree/archive) +#### Windoes Desktop Preview From 5064db2aad50e580b6b4ead1c1cf4953b3a9a36c Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:23:27 +0200 Subject: [PATCH 030/104] readme: add illogical impulse logo --- .github/assets/illogical-impulse.svg | 122 +++++++++++++++++++++++++++ README.md | 6 +- 2 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 .github/assets/illogical-impulse.svg diff --git a/.github/assets/illogical-impulse.svg b/.github/assets/illogical-impulse.svg new file mode 100644 index 000000000..4d1362b00 --- /dev/null +++ b/.github/assets/illogical-impulse.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index 21a92ab5d..44bb2c0ba 100644 --- a/README.md +++ b/README.md @@ -70,9 +70,9 @@

- +
+ illogical-impulse logo +
### Quickshell From 16e07a82132b2fff94c10fb4fa5931a70af6f02a Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:25:10 +0200 Subject: [PATCH 031/104] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 44bb2c0ba..97e0a32c9 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ illogical-impulse logo -### Quickshell +### illogical-impulseQuickshell | AI | Common widgets | |:---|:---------------| @@ -86,7 +86,7 @@ By the way... - The funny notification positions are mimicking Android 16's dragging behavior - The clock on the wallpaper is automatically placed at the "least busy" region of the image -### AGS +### illogical-impulseAGS (Deprecated) | AI | Common widgets | |:---|:---------------| From f973052d16cedb3c1ba580e88f22891036388be6 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 01:29:11 +0200 Subject: [PATCH 032/104] Update README.md --- README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 97e0a32c9..cd4c1a795 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,8 @@ illogical-impulse logo +_illogical-impulse is the latest and only style that I actively use. Other past styles are still there for your viewing pleasure and not actual use, but code is still available, see below._ + ### illogical-impulseQuickshell | AI | Common widgets | @@ -82,10 +84,6 @@ | 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) | -By the way... -- The funny notification positions are mimicking Android 16's dragging behavior -- The clock on the wallpaper is automatically placed at the "least busy" region of the image - ### illogical-impulseAGS (Deprecated) | AI | Common widgets | @@ -96,8 +94,7 @@ By the way... ### Unsupported stuff -- The pics are here mainly for your viewing pleasure -- The files are still available, feel free to grab them from the [`archive`](https://github.com/end-4/dots-hyprland/tree/archive) branch if you're willing to see some spaghetti and troubleshoot +- Source code not likely to work but still available in the [`archive`](https://github.com/end-4/dots-hyprland/tree/archive) branch. Extremely spaghetti. - Click image for a presentation video #### m3ww From b289ceccade9814f1191a04c6e0594649e9c018e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=B5=E3=82=89=E3=81=BE=E3=82=8A=E3=82=93?= <62203463+Flamarine@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:23:26 +0800 Subject: [PATCH 033/104] include possible zed aliases in keybinds.conf --- .config/hypr/hyprland/keybinds.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/hypr/hyprland/keybinds.conf b/.config/hypr/hyprland/keybinds.conf index a1ded9f09..dea313563 100644 --- a/.config/hypr/hyprland/keybinds.conf +++ b/.config/hypr/hyprland/keybinds.conf @@ -203,7 +203,7 @@ bind = Super, T, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh bind = Ctrl+Alt, T, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kitty -1" "foot" "alacritty" "wezterm" "konsole" "kgx" "uxterm" "xterm" # [hidden] Kitty (for Ubuntu people) bind = Super, E, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "dolphin" "nautilus" "nemo" "thunar" "kitty -1 fish -c yazi" # File manager bind = Super, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "google-chrome-stable" "zen-browser" "firefox" "brave" "chromium" "microsoft-edge-stable" "opera" # Browser -bind = Super, C, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "code" "codium" "zed" "kate" "gnome-text-editor" "emacs" "command -v nvim && kitty -1 nvim" # Code editor +bind = Super, C, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "code" "codium" "zed" "zedit" "zeditor" "kate" "gnome-text-editor" "emacs" "command -v nvim && kitty -1 nvim" # Code editor bind = Super+Shift, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "wps" "onlyoffice-desktopeditors" # Office software bind = Super, X, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kate" "gnome-text-editor" "emacs" # Text editor bind = Ctrl+Super, V, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "pavucontrol-qt" "pavucontrol" # Volume mixer From cd92d14ad25fa878e6eba5df381e69b55be6ea26 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 08:43:30 +0200 Subject: [PATCH 034/104] readme: update screenshot --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cd4c1a795..aad74cfa1 100644 --- a/README.md +++ b/README.md @@ -78,9 +78,9 @@ _illogical-impulse is the latest and only style that I actively use. Other past ### illogical-impulseQuickshell -| AI | Common widgets | +| AI, settings app | Some widgets | |:---|:---------------| -| ![image](https://github.com/user-attachments/assets/08d26785-b54d-4ad1-875b-bb08cc6757f5) | ![image](https://github.com/user-attachments/assets/4fcd63d9-0943-4b21-8737-4bed97b71961) | +| ![image](https://github.com/user-attachments/assets/4d45e860-ae60-418a-a564-309b4939f5c4) | ![image](https://github.com/user-attachments/assets/4fcd63d9-0943-4b21-8737-4bed97b71961) | | 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) | From 4e71d002ea36fc5f5ffd6e502a72271d0e0f7602 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:04:52 +0200 Subject: [PATCH 035/104] smooth zooming --- .config/hypr/hyprland/keybinds.conf | 6 ++++-- .config/quickshell/GlobalStates.qml | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/.config/hypr/hyprland/keybinds.conf b/.config/hypr/hyprland/keybinds.conf index a1ded9f09..71835548d 100644 --- a/.config/hypr/hyprland/keybinds.conf +++ b/.config/hypr/hyprland/keybinds.conf @@ -183,8 +183,10 @@ bindd = Ctrl+Shift+Alt+Super, Delete, Shutdown, exec, systemctl poweroff || logi ##! Screen # Zoom -binde = Super, Minus, exec, ~/.config/hypr/hyprland/scripts/zoom.sh decrease 0.1 # Zoom out -binde = Super, Equal, exec, ~/.config/hypr/hyprland/scripts/zoom.sh increase 0.1 # Zoom in +binde = Super, Minus, exec, qs ipc call zoom zoomOut # Zoom out +binde = Super, Equal, exec, qs ipc call zoom zoomIn # Zoom in +binde = Super, Minus, exec, qs ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh decrease 0.1 # [hidden] Zoom out +binde = Super, Equal, exec, qs ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh increase 0.1 # [hidden] Zoom in ##! Media bindl= Super+Shift, N, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` # Next track diff --git a/.config/quickshell/GlobalStates.qml b/.config/quickshell/GlobalStates.qml index 49ae3f578..b7ddef5a9 100644 --- a/.config/quickshell/GlobalStates.qml +++ b/.config/quickshell/GlobalStates.qml @@ -14,6 +14,14 @@ Singleton { property bool workspaceShowNumbers: false property bool superReleaseMightTrigger: true + property real screenZoom: 1 + onScreenZoomChanged: { + Quickshell.execDetached(["hyprctl", "keyword", "cursor:zoom_factor", root.screenZoom.toString()]); + } + Behavior on screenZoom { + animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) + } + // When user is not reluctant while pressing super, they probably don't need to see workspace numbers onSuperReleaseMightTriggerChanged: { workspaceShowNumbersTimer.stop() @@ -41,4 +49,16 @@ Singleton { workspaceShowNumbers = false } } + + IpcHandler { + target: "zoom" + + function zoomIn() { + screenZoom = Math.min(screenZoom + 0.4, 3.0) + } + + function zoomOut() { + screenZoom = Math.max(screenZoom - 0.4, 1) + } + } } \ No newline at end of file From 3c7d55c7937889c619301481790704863c462000 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:05:08 +0200 Subject: [PATCH 036/104] extra bg tint --- .config/quickshell/modules/common/Appearance.qml | 2 +- .config/quickshell/modules/common/Config.qml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.config/quickshell/modules/common/Appearance.qml b/.config/quickshell/modules/common/Appearance.qml index 70437e12a..c8b62350a 100644 --- a/.config/quickshell/modules/common/Appearance.qml +++ b/.config/quickshell/modules/common/Appearance.qml @@ -100,7 +100,7 @@ Singleton { colors: QtObject { property color colSubtext: m3colors.m3outline - property color colLayer0: ColorUtils.transparentize(m3colors.m3background, root.transparency) + property color colLayer0: ColorUtils.mix(ColorUtils.transparentize(m3colors.m3background, root.transparency), m3colors.m3primary, Config.options.appearance.extraBackgroundTint ? 0.97 : 1) property color colOnLayer0: m3colors.m3onBackground property color colLayer0Hover: ColorUtils.transparentize(ColorUtils.mix(colLayer0, colOnLayer0, 0.9, root.contentTransparency)) property color colLayer0Active: ColorUtils.transparentize(ColorUtils.mix(colLayer0, colOnLayer0, 0.8, root.contentTransparency)) diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index 76b45df10..e8f2f39de 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -63,6 +63,7 @@ Singleton { } property JsonObject appearance: JsonObject { + property bool extraBackgroundTint: true property int fakeScreenRounding: 2 // 0: None | 1: Always | 2: When not fullscreen property bool transparency: false property JsonObject palette: JsonObject { From b0cd46f7832f9ec0550759d2584c2dc0435be559 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:05:43 +0200 Subject: [PATCH 037/104] screenshot: add app icons --- .config/quickshell/screenshot.qml | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/.config/quickshell/screenshot.qml b/.config/quickshell/screenshot.qml index 8e9af0499..3368b6b77 100644 --- a/.config/quickshell/screenshot.qml +++ b/.config/quickshell/screenshot.qml @@ -15,6 +15,7 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import Quickshell.Io +import Quickshell.Widgets import Quickshell.Wayland import Quickshell.Hyprland import "./services/" @@ -44,6 +45,7 @@ ShellRoot { component TargetRegion: Rectangle { id: regionRect + property bool showIcon: false property bool targeted: false property color borderColor property color fillColor: "transparent" @@ -69,13 +71,27 @@ ShellRoot { topMargin: regionRect.textPadding leftMargin: regionRect.textPadding } - implicitWidth: regionText.implicitWidth + horizontalPadding * 2 - implicitHeight: regionText.implicitHeight + verticalPadding * 2 - StyledText { - id: regionText - text: regionRect.text - color: root.genericContentForeground + implicitWidth: regionInfoRow.implicitWidth + horizontalPadding * 2 + implicitHeight: regionInfoRow.implicitHeight + verticalPadding * 2 + RowLayout { + id: regionInfoRow anchors.centerIn: parent + spacing: 8 + + Loader { + id: regionIconLoader + active: regionRect.showIcon + sourceComponent: IconImage { + implicitSize: Appearance.font.pixelSize.larger + source: Quickshell.iconPath(AppSearch.guessIcon(regionRect.text), "image-missing") + } + } + + StyledText { + id: regionText + text: regionRect.text + color: root.genericContentForeground + } } } } @@ -117,7 +133,7 @@ ShellRoot { const layersOfThisMonitor = root.layers[panelWindow.hyprlandMonitor.name] const topLayers = layersOfThisMonitor.levels["2"] const nonBarTopLayers = topLayers - .filter(layer => !(layer.namespace.includes(":bar"))) + .filter(layer => !(layer.namespace.includes(":bar") || layer.namespace.includes(":dock"))) .map(layer => { return { at: [layer.x, layer.y], @@ -441,6 +457,7 @@ ShellRoot { delegate: TargetRegion { z: 2 required property var modelData + showIcon: true targeted: !panelWindow.draggedAway && (panelWindow.targetedRegionX === modelData.at[0] && panelWindow.targetedRegionY === modelData.at[1] From 9b050e8e21bb7082529c324119a74df38f02b921 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:06:22 +0200 Subject: [PATCH 038/104] add border to panels --- .config/quickshell/modules/cheatsheet/Cheatsheet.qml | 2 ++ .config/quickshell/modules/dock/Dock.qml | 2 ++ .config/quickshell/modules/overview/OverviewWidget.qml | 2 ++ .config/quickshell/modules/overview/SearchWidget.qml | 2 ++ .config/quickshell/modules/sidebarLeft/SidebarLeft.qml | 2 ++ .config/quickshell/modules/sidebarRight/SidebarRight.qml | 2 ++ 6 files changed, 12 insertions(+) diff --git a/.config/quickshell/modules/cheatsheet/Cheatsheet.qml b/.config/quickshell/modules/cheatsheet/Cheatsheet.qml index 79711f88f..0edc121ee 100644 --- a/.config/quickshell/modules/cheatsheet/Cheatsheet.qml +++ b/.config/quickshell/modules/cheatsheet/Cheatsheet.qml @@ -64,6 +64,8 @@ Scope { // Scope id: cheatsheetBackground anchors.centerIn: parent color: Appearance.colors.colLayer0 + border.width: 1 + border.color: Appearance.m3colors.m3outlineVariant radius: Appearance.rounding.windowRounding property real padding: 30 implicitWidth: cheatsheetColumnLayout.implicitWidth + padding * 2 diff --git a/.config/quickshell/modules/dock/Dock.qml b/.config/quickshell/modules/dock/Dock.qml index a78e93d9b..04af9810a 100644 --- a/.config/quickshell/modules/dock/Dock.qml +++ b/.config/quickshell/modules/dock/Dock.qml @@ -94,6 +94,8 @@ Scope { // Scope anchors.topMargin: Appearance.sizes.elevationMargin anchors.bottomMargin: Appearance.sizes.hyprlandGapsOut color: Appearance.colors.colLayer0 + border.width: 1 + border.color: Appearance.m3colors.m3outlineVariant radius: Appearance.rounding.large } diff --git a/.config/quickshell/modules/overview/OverviewWidget.qml b/.config/quickshell/modules/overview/OverviewWidget.qml index 9a7b64051..a17cc0453 100644 --- a/.config/quickshell/modules/overview/OverviewWidget.qml +++ b/.config/quickshell/modules/overview/OverviewWidget.qml @@ -63,6 +63,8 @@ Item { implicitHeight: workspaceColumnLayout.implicitHeight + padding * 2 radius: Appearance.rounding.screenRounding * root.scale + padding color: Appearance.colors.colLayer0 + border.width: 1 + border.color: Appearance.m3colors.m3outlineVariant ColumnLayout { // Workspaces id: workspaceColumnLayout diff --git a/.config/quickshell/modules/overview/SearchWidget.qml b/.config/quickshell/modules/overview/SearchWidget.qml index a858bfd01..91998aa9c 100644 --- a/.config/quickshell/modules/overview/SearchWidget.qml +++ b/.config/quickshell/modules/overview/SearchWidget.qml @@ -179,6 +179,8 @@ Item { // Wrapper implicitHeight: columnLayout.implicitHeight radius: Appearance.rounding.large color: Appearance.colors.colLayer0 + border.width: 1 + border.color: Appearance.m3colors.m3outlineVariant ColumnLayout { id: columnLayout diff --git a/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml b/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml index ce0b22802..64a5b55ac 100644 --- a/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml +++ b/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml @@ -100,6 +100,8 @@ Scope { // Scope width: sidebarRoot.sidebarWidth - Appearance.sizes.hyprlandGapsOut - Appearance.sizes.elevationMargin height: parent.height - Appearance.sizes.hyprlandGapsOut * 2 color: Appearance.colors.colLayer0 + border.width: 1 + border.color: Appearance.m3colors.m3outlineVariant radius: Appearance.rounding.screenRounding - Appearance.sizes.hyprlandGapsOut + 1 Behavior on width { diff --git a/.config/quickshell/modules/sidebarRight/SidebarRight.qml b/.config/quickshell/modules/sidebarRight/SidebarRight.qml index ebdd9e4ee..376687af3 100644 --- a/.config/quickshell/modules/sidebarRight/SidebarRight.qml +++ b/.config/quickshell/modules/sidebarRight/SidebarRight.qml @@ -89,6 +89,8 @@ Scope { implicitHeight: parent.height - Appearance.sizes.hyprlandGapsOut * 2 implicitWidth: sidebarWidth - Appearance.sizes.hyprlandGapsOut * 2 color: Appearance.colors.colLayer0 + border.width: 1 + border.color: Appearance.m3colors.m3outlineVariant radius: Appearance.rounding.screenRounding - Appearance.sizes.hyprlandGapsOut + 1 ColumnLayout { From d9b9b8c9b24154fca3222c383512d65f19535a32 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:06:59 +0200 Subject: [PATCH 039/104] media controls: mix a bit of accent color --- .config/quickshell/modules/mediaControls/PlayerControl.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/modules/mediaControls/PlayerControl.qml b/.config/quickshell/modules/mediaControls/PlayerControl.qml index cce0788db..9cce01112 100644 --- a/.config/quickshell/modules/mediaControls/PlayerControl.qml +++ b/.config/quickshell/modules/mediaControls/PlayerControl.qml @@ -23,7 +23,7 @@ Item { // Player instance property string artDownloadLocation: Directories.coverArt property string artFileName: Qt.md5(artUrl) + ".jpg" property string artFilePath: `${artDownloadLocation}/${artFileName}` - property color artDominantColor: colorQuantizer?.colors[0] || Appearance.m3colors.m3secondaryContainer + property color artDominantColor: ColorUtils.mix(colorQuantizer?.colors[0], Appearance.colors.colPrimaryContainer, 0.8) || Appearance.m3colors.m3secondaryContainer property bool downloaded: false property list visualizerPoints: [] property real maxVisualizerValue: 1000 // Max value in the data points From 265b410a878f8e10c87548816e2cdf761c352c36 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:07:23 +0200 Subject: [PATCH 040/104] Update switchwall.sh --- .config/quickshell/scripts/colors/switchwall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/scripts/colors/switchwall.sh b/.config/quickshell/scripts/colors/switchwall.sh index 35caba66f..560a8cfc7 100755 --- a/.config/quickshell/scripts/colors/switchwall.sh +++ b/.config/quickshell/scripts/colors/switchwall.sh @@ -330,7 +330,7 @@ main() { # Only prompt for wallpaper if not using --color and not using --noswitch and no imgpath set if [[ -z "$imgpath" && -z "$color_flag" && -z "$noswitch_flag" ]]; then - cd "$(xdg-user-dir PICTURES)/Wallpapers" 2>/dev/null || cd "$(xdg-user-dir PICTURES)" || return 1 + cd "$(xdg-user-dir PICTURES)/Wallpapers/showcase" 2>/dev/null || cd "$(xdg-user-dir PICTURES)/Wallpapers" 2>/dev/null || cd "$(xdg-user-dir PICTURES)" || return 1 imgpath="$(kdialog --getopenfilename . --title 'Choose wallpaper')" fi From d4f193ae69245c35a892dab31b7b219c2a39f35b Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:55:01 +0200 Subject: [PATCH 041/104] dock: monochrome icons --- .config/quickshell/modules/common/Config.qml | 1 + .../quickshell/modules/dock/DockAppButton.qml | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index e8f2f39de..b2db153d2 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -135,6 +135,7 @@ Singleton { property JsonObject dock: JsonObject { property bool enable: false + property bool monochromeIcons: true property real height: 60 property real hoverRegionHeight: 2 property bool pinnedOnStartup: false diff --git a/.config/quickshell/modules/dock/DockAppButton.qml b/.config/quickshell/modules/dock/DockAppButton.qml index f4623e625..8afa65672 100644 --- a/.config/quickshell/modules/dock/DockAppButton.qml +++ b/.config/quickshell/modules/dock/DockAppButton.qml @@ -3,6 +3,7 @@ import "root:/services" import "root:/modules/common" import "root:/modules/common/widgets" import "root:/modules/common/functions/color_utils.js" as ColorUtils +import Qt5Compat.GraphicalEffects import QtQuick import QtQuick.Controls import QtQuick.Effects @@ -91,6 +92,25 @@ DockButton { } } + Loader { + active: Config.options.dock.monochromeIcons + anchors.fill: iconImageLoader + sourceComponent: Item { + Desaturate { + id: desaturatedIcon + visible: false // There's already color overlay + anchors.fill: parent + source: iconImageLoader + desaturation: 0.8 + } + ColorOverlay { + anchors.fill: desaturatedIcon + source: desaturatedIcon + color: ColorUtils.transparentize(Appearance.colors.colPrimary, 0.9) + } + } + } + RowLayout { spacing: 3 anchors { From d5f7a72d19d911606ab3ae135f93553587743a77 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 09:55:12 +0200 Subject: [PATCH 042/104] bar: workspaces: adjust monochromization --- .config/quickshell/modules/bar/Workspaces.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/quickshell/modules/bar/Workspaces.qml b/.config/quickshell/modules/bar/Workspaces.qml index cd32cd325..f91cdaa93 100644 --- a/.config/quickshell/modules/bar/Workspaces.qml +++ b/.config/quickshell/modules/bar/Workspaces.qml @@ -268,12 +268,12 @@ Item { visible: false // There's already color overlay anchors.fill: parent source: mainAppIcon - desaturation: 1 + desaturation: 0.8 } ColorOverlay { anchors.fill: desaturatedIcon source: desaturatedIcon - color: ColorUtils.transparentize(wsDot.color, 0.6) + color: ColorUtils.transparentize(wsDot.color, 0.9) } } } From bcb60d8ab70073373c1e8676c074964686eb85b8 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 10:30:18 +0200 Subject: [PATCH 043/104] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aad74cfa1..04aa5ca3a 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ illogical-impulse logo -_illogical-impulse is the latest and only style that I actively use. Other past styles are still there for your viewing pleasure and not actual use, but code is still available, see below._ +_latest and only style that I actively use. Other past styles are still there for your viewing pleasure and not actual use, but code is still available, see below._ ### illogical-impulseQuickshell From f6f7ac19fda88aeac57eb7fc2834b2b609b83fe2 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:32:59 +0200 Subject: [PATCH 044/104] fix bar font size --- .config/quickshell/modules/bar/Bar.qml | 14 +++++++------- .../quickshell/modules/bar/weather/WeatherBar.qml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index 1785e3179..c99629cc7 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -483,14 +483,14 @@ Scope { Item { Layout.fillWidth: true Layout.fillHeight: true + } - // Weather - Loader { - active: Config.options.bar.weather.enable - sourceComponent: BarGroup { - implicitHeight: Appearance.sizes.baseBarHeight - WeatherBar {} - } + // Weather + Loader { + active: Config.options.bar.weather.enable + sourceComponent: BarGroup { + implicitHeight: Appearance.sizes.baseBarHeight + WeatherBar {} } } } diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml index c0fda9641..26804308b 100644 --- a/.config/quickshell/modules/bar/weather/WeatherBar.qml +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -40,7 +40,7 @@ Item { StyledText { visible: true - font.pixelSize: Appearance.font.pixelSize.large + font.pixelSize: Appearance.font.pixelSize.small color: Appearance.colors.colOnLayer1 text: Weather.data.temp Layout.alignment: Qt.AlignVCenter From 9043440c8d664ccca4bd2ad433a42b6f705f50b6 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:37:51 +0200 Subject: [PATCH 045/104] fix spacing --- .config/quickshell/modules/bar/Bar.qml | 2 ++ .config/quickshell/modules/bar/weather/WeatherPopup.qml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index c99629cc7..27b188d02 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -487,6 +487,8 @@ Scope { // Weather Loader { + Layout.leftMargin: 8 + Layout.fillHeight: true active: Config.options.bar.weather.enable sourceComponent: BarGroup { implicitHeight: Appearance.sizes.baseBarHeight diff --git a/.config/quickshell/modules/bar/weather/WeatherPopup.qml b/.config/quickshell/modules/bar/weather/WeatherPopup.qml index cda627455..b39fffd37 100644 --- a/.config/quickshell/modules/bar/weather/WeatherPopup.qml +++ b/.config/quickshell/modules/bar/weather/WeatherPopup.qml @@ -12,6 +12,8 @@ Rectangle { implicitHeight: columnLayout.implicitHeight + margin * 2 color: Appearance.colors.colLayer0 radius: Appearance.rounding.small + border.width: 1 + border.color: Appearance.m3colors.m3outlineVariant clip: true ColumnLayout { From ba8c737543f45e4bdec887772a595a4ba59b091c Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:38:07 +0200 Subject: [PATCH 046/104] weather bar: remove unnecessary nested item --- .../modules/bar/weather/WeatherBar.qml | 57 ++++++++----------- 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml index 26804308b..ccd27a1b8 100644 --- a/.config/quickshell/modules/bar/weather/WeatherBar.qml +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -7,44 +7,37 @@ import Quickshell import QtQuick import QtQuick.Layouts -Item { +MouseArea { id: root property real margin: 10 - implicitHeight: mouseArea.implicitHeight - implicitWidth: mouseArea.implicitWidth + margin * 2 + property bool hovered: false + implicitWidth: rowLayout.implicitWidth + margin * 2 + implicitHeight: rowLayout.implicitHeight - MouseArea { - id: mouseArea - property bool hovered: false - implicitWidth: rowLayout.implicitWidth - implicitHeight: rowLayout.implicitHeight - anchors.centerIn: root + hoverEnabled: true + onEntered: { + popupLoader.item.visible = true; + } + onExited: { + popupLoader.item.visible = false; + } - hoverEnabled: true - onEntered: { - popupLoader.item.visible = true; - } - onExited: { - popupLoader.item.visible = false; + RowLayout { + id: rowLayout + MaterialSymbol { + fill: 0 + text: WeatherIcons.codeToName[Weather.data.wCode] + iconSize: Appearance.font.pixelSize.large + color: Appearance.colors.colOnLayer1 + Layout.alignment: Qt.AlignVCenter } - RowLayout { - id: rowLayout - MaterialSymbol { - fill: 0 - text: WeatherIcons.codeToName[Weather.data.wCode] - iconSize: Appearance.font.pixelSize.large - color: Appearance.colors.colOnLayer1 - Layout.alignment: Qt.AlignVCenter - } - - StyledText { - visible: true - font.pixelSize: Appearance.font.pixelSize.small - color: Appearance.colors.colOnLayer1 - text: Weather.data.temp - Layout.alignment: Qt.AlignVCenter - } + StyledText { + visible: true + font.pixelSize: Appearance.font.pixelSize.small + color: Appearance.colors.colOnLayer1 + text: Weather.data.temp + Layout.alignment: Qt.AlignVCenter } } From 41a8bfa097d4c1ac1b575fd109416926f8171805 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:44:28 +0200 Subject: [PATCH 047/104] bar: weather popup: use loader properly --- .config/quickshell/modules/bar/weather/WeatherBar.qml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml index ccd27a1b8..f0fa0cfc5 100644 --- a/.config/quickshell/modules/bar/weather/WeatherBar.qml +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -15,12 +15,6 @@ MouseArea { implicitHeight: rowLayout.implicitHeight hoverEnabled: true - onEntered: { - popupLoader.item.visible = true; - } - onExited: { - popupLoader.item.visible = false; - } RowLayout { id: rowLayout @@ -43,10 +37,11 @@ MouseArea { LazyLoader { id: popupLoader - active: true + active: root.containsMouse component: PopupWindow { id: popupWindow + visible: true implicitWidth: weatherPopup.implicitWidth implicitHeight: weatherPopup.implicitHeight anchor.item: root From 8dccac4cda7b0a8c7ab2eda762b27692d7b10568 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:45:27 +0200 Subject: [PATCH 048/104] bar: weather: disable by default --- .config/quickshell/modules/common/Config.qml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index 2b69c9c4f..594dbefd5 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -123,16 +123,11 @@ Singleton { property int showNumberDelay: 300 // milliseconds } property JsonObject weather: JsonObject { - property bool enable: true - // gps based location - property bool enableGPS: true - // use if 'enableGPS' is false - property string city: "" - // use uscs units - // by default use metric (SI) units - property bool useUSCS: false - // in minutes - property int fetchInterval: 10 + property bool enable: false + property bool enableGPS: true // gps based location + property string city: "" // When 'enableGPS' is false + property bool useUSCS: false // Instead of metric (SI) units + property int fetchInterval: 10 // minutes } } From e843164f60221e9c4dbb2043076b4e3f8e4d2429 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 11:50:26 +0200 Subject: [PATCH 049/104] bar: weather: fix alignment --- .config/quickshell/modules/bar/weather/WeatherBar.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml index f0fa0cfc5..5d54562d7 100644 --- a/.config/quickshell/modules/bar/weather/WeatherBar.qml +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -18,6 +18,8 @@ MouseArea { RowLayout { id: rowLayout + anchors.centerIn: parent + MaterialSymbol { fill: 0 text: WeatherIcons.codeToName[Weather.data.wCode] From e393e4df1a9f6f17fa36f1ca0e4b79bee9604313 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 21:03:54 +0200 Subject: [PATCH 050/104] readme: add showcase video for ii-qs --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 04aa5ca3a..4b48e70a4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -
+![image](https://github.com/user-attachments/assets/61d06199-d894-4dfc-84a6-b660ab98444a)

【 end_4's Hyprland dotfiles 】

@@ -78,6 +78,8 @@ _latest and only style that I actively use. Other past styles are still there fo ### illogical-impulseQuickshell +[Showcase video](https://www.youtube.com/watch?v=RPwovTInagE) + | 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) | From e06ab94fb6f52969aef484ae6501af1178e7ec8a Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 5 Jul 2025 21:04:18 +0200 Subject: [PATCH 051/104] readme: remove acceidentally pasted image --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b48e70a4..7da858278 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![image](https://github.com/user-attachments/assets/61d06199-d894-4dfc-84a6-b660ab98444a)
+

【 end_4's Hyprland dotfiles 】

From 7bcb01964f3beec50694410f94de70ba1009c3f4 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 6 Jul 2025 09:05:23 +0200 Subject: [PATCH 052/104] settings: move weather --- .../quickshell/modules/settings/InterfaceConfig.qml | 11 +++++++++++ .../quickshell/modules/settings/ServicesConfig.qml | 11 ----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.config/quickshell/modules/settings/InterfaceConfig.qml b/.config/quickshell/modules/settings/InterfaceConfig.qml index 29fd21d11..9e23fafba 100644 --- a/.config/quickshell/modules/settings/InterfaceConfig.qml +++ b/.config/quickshell/modules/settings/InterfaceConfig.qml @@ -212,6 +212,17 @@ ContentPage { } } } + + ContentSubsection { + title: "Weather" + ConfigSwitch { + text: "Enable" + checked: Config.options.bar.weather.enable + onCheckedChanged: { + Config.options.bar.weather.enable = checked; + } + } + } } ContentSection { diff --git a/.config/quickshell/modules/settings/ServicesConfig.qml b/.config/quickshell/modules/settings/ServicesConfig.qml index 97d80a18a..af241d67a 100644 --- a/.config/quickshell/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/modules/settings/ServicesConfig.qml @@ -137,15 +137,4 @@ ContentPage { } } } - - ContentSection { - title: "Weather" - ConfigSwitch { - text: "enable" - checked: Config.options.bar.weather.enable - onCheckedChanged: { - Config.options.bar.weather.enable = checked; - } - } - } } From 43b937814451fa3466b34b76c3b1c67e3e807117 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 6 Jul 2025 09:06:14 +0200 Subject: [PATCH 053/104] config: option to show/hide screenshot content regions (#1539) --- .config/quickshell/modules/common/Config.qml | 4 ++++ .config/quickshell/screenshot.qml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index 81a8989de..b8a051b54 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -222,6 +222,10 @@ Singleton { property JsonObject hacks: JsonObject { property int arbitraryRaceConditionDelay: 20 // milliseconds } + + property JsonObject screenshotTool: JsonObject { + property bool showContentRegions: true + } } } } diff --git a/.config/quickshell/screenshot.qml b/.config/quickshell/screenshot.qml index 3368b6b77..9fe0ebb05 100644 --- a/.config/quickshell/screenshot.qml +++ b/.config/quickshell/screenshot.qml @@ -517,7 +517,7 @@ ShellRoot { // Image regions Repeater { model: ScriptModel { - values: panelWindow.imageRegions + values: Config.options.screenshotTool.showContentRegions ? panelWindow.imageRegions : [] } delegate: TargetRegion { z: 4 From 9d6452aaaf3723f2fcce38fdd90e62168e41bb3f Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 6 Jul 2025 09:11:37 +0200 Subject: [PATCH 054/104] screenshooter: remove weird gap on non-window region labels --- .config/quickshell/screenshot.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/quickshell/screenshot.qml b/.config/quickshell/screenshot.qml index 9fe0ebb05..4e9422fe1 100644 --- a/.config/quickshell/screenshot.qml +++ b/.config/quickshell/screenshot.qml @@ -81,6 +81,7 @@ ShellRoot { Loader { id: regionIconLoader active: regionRect.showIcon + visible: active sourceComponent: IconImage { implicitSize: Appearance.font.pixelSize.larger source: Quickshell.iconPath(AppSearch.guessIcon(regionRect.text), "image-missing") From ae69a4f11aad9c34317cf12f09cd3926d7be84df Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:48:43 +0200 Subject: [PATCH 055/104] ai: load/save --- .../quickshell/modules/common/Directories.qml | 6 +- .../quickshell/modules/sidebarLeft/AiChat.qml | 24 ++++++ .config/quickshell/services/Ai.qml | 76 ++++++++++++++++++- .config/quickshell/services/AiMessageData.qml | 1 + 4 files changed, 104 insertions(+), 3 deletions(-) diff --git a/.config/quickshell/modules/common/Directories.qml b/.config/quickshell/modules/common/Directories.qml index b058c2001..f4eb448cf 100644 --- a/.config/quickshell/modules/common/Directories.qml +++ b/.config/quickshell/modules/common/Directories.qml @@ -33,14 +33,16 @@ Singleton { property string wallpaperSwitchScriptPath: FileUtils.trimFileProtocol(`${Directories.scriptPath}/colors/switchwall.sh`) property string defaultAiPrompts: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/defaults/ai/prompts`) property string userAiPrompts: FileUtils.trimFileProtocol(`${Directories.shellConfig}/ai/prompts`) + property string aiChats: FileUtils.trimFileProtocol(`${Directories.state}/user/ai/chats`) // Cleanup on init Component.onCompleted: { - Quickshell.execDetached(["bash", "-c", `mkdir -p '${shellConfig}'`]) - Quickshell.execDetached(["bash", "-c", `mkdir -p '${favicons}'`]) + Quickshell.execDetached(["mkdir", "-p", `${shellConfig}`]) + 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/modules/sidebarLeft/AiChat.qml b/.config/quickshell/modules/sidebarLeft/AiChat.qml index db5d66828..26d0636cf 100644 --- a/.config/quickshell/modules/sidebarLeft/AiChat.qml +++ b/.config/quickshell/modules/sidebarLeft/AiChat.qml @@ -71,6 +71,30 @@ Item { } } }, + { + name: "save", + description: qsTr("Save chat"), + execute: (args) => { + const joinedArgs = args.join(" ") + if (joinedArgs.trim().length == 0) { + Ai.addMessage(`Usage: ${root.commandPrefix}save CHAT_NAME`, Ai.interfaceRole); + return; + } + Ai.saveChat(joinedArgs) + } + }, + { + name: "load", + description: qsTr("Load chat"), + execute: (args) => { + const joinedArgs = args.join(" ") + if (joinedArgs.trim().length == 0) { + Ai.addMessage(`Usage: ${root.commandPrefix}load CHAT_NAME`, Ai.interfaceRole); + return; + } + Ai.loadChat(joinedArgs) + } + }, { name: "clear", description: qsTr("Clear chat history"), diff --git a/.config/quickshell/services/Ai.qml b/.config/quickshell/services/Ai.qml index c97ba2b50..7ab1eb731 100644 --- a/.config/quickshell/services/Ai.qml +++ b/.config/quickshell/services/Ai.qml @@ -19,7 +19,7 @@ Singleton { readonly property string apiKeyEnvVarName: "API_KEY" property Component aiMessageComponent: AiMessageData {} property string systemPrompt: Config.options?.ai?.systemPrompt ?? "" - property var messages: [] + // property var messages: [] property var messageIDs: [] property var messageByID: ({}) readonly property var apiKeys: KeyringStorage.keyringData?.apiKeys ?? {} @@ -317,6 +317,7 @@ Singleton { const aiMessage = aiMessageComponent.createObject(root, { "role": role, "content": message, + "rawContent": message, "thinking": false, "done": true, }); @@ -533,6 +534,7 @@ Singleton { "role": "assistant", "model": currentModelId, "content": "", + "rawContent": "", "thinking": true, "done": false, }); @@ -719,6 +721,7 @@ Singleton { const aiMessage = aiMessageComponent.createObject(root, { "role": "user", "content": `[[ Output of ${name} ]]`, + "rawContent": `[[ Output of ${name} ]]`, "functionName": name, "functionResponse": output, "thinking": false, @@ -771,4 +774,75 @@ Singleton { else root.addMessage(qsTr("Unknown function call: {0}"), "assistant"); } + function chatToJson() { + return root.messageIDs.map(id => { + const message = root.messageByID[id] + return ({ + "role": message.role, + "rawContent": message.rawContent, + "model": message.model, + "thinking": false, + "done": true, + "annotations": message.annotations, + "annotationSources": message.annotationSources, + "functionName": message.functionName, + "functionCall": message.functionCall, + "functionResponse": message.functionResponse, + "visibleToUser": message.visibleToUser, + }) + }) + } + + FileView { + id: chatSaveFile + property string chatName: "chat" + path: `${Directories.aiChats}/${chatName}.json` + } + + /** + * Saves chat to a JSON list of message objects. + * @param chatName name of the chat + */ + function saveChat(chatName) { + chatSaveFile.chatName = chatName + const saveContent = JSON.stringify(root.chatToJson()) + chatSaveFile.setText(saveContent) + } + + /** + * Loads chat from a JSON list of message objects. + * @param chatName name of the chat + */ + function loadChat(chatName) { + try { + chatSaveFile.chatName = chatName + const saveContent = chatSaveFile.text() + console.log(saveContent) + const saveData = JSON.parse(saveContent) + root.clearMessages() + root.messageIDs = saveData.map((_, i) => { + return i + }) + console.log(JSON.stringify(messageIDs)) + for (let i = 0; i < saveData.length; i++) { + const message = saveData[i]; + root.messageByID[i] = root.aiMessageComponent.createObject(root, { + "role": message.role, + "rawContent": message.rawContent, + "content": message.rawContent, + "model": message.model, + "thinking": message.thinking, + "done": message.done, + "annotations": message.annotations, + "annotationSources": message.annotationSources, + "functionName": message.functionName, + "functionCall": message.functionCall, + "functionResponse": message.functionResponse, + "visibleToUser": message.visibleToUser, + }); + } + } catch (e) { + console.log("[AI] Could not load chat: ", e); + } + } } diff --git a/.config/quickshell/services/AiMessageData.qml b/.config/quickshell/services/AiMessageData.qml index b5f208548..dc8b80fdb 100644 --- a/.config/quickshell/services/AiMessageData.qml +++ b/.config/quickshell/services/AiMessageData.qml @@ -7,6 +7,7 @@ import QtQuick; QtObject { property string role property string content + property string rawContent property string model property bool thinking: true property bool done: false From 04e0266a4e02faceacecfa5e338b6ac9db480fbc Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:19:50 +0200 Subject: [PATCH 056/104] sidebar: ai: add suggestions for save/load --- .../quickshell/modules/sidebarLeft/AiChat.qml | 44 +++++++++++++++++-- .config/quickshell/services/Ai.qml | 26 +++++++++-- 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/.config/quickshell/modules/sidebarLeft/AiChat.qml b/.config/quickshell/modules/sidebarLeft/AiChat.qml index 26d0636cf..b6ef48c10 100644 --- a/.config/quickshell/modules/sidebarLeft/AiChat.qml +++ b/.config/quickshell/modules/sidebarLeft/AiChat.qml @@ -382,11 +382,11 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\) background: null onTextChanged: { // Handle suggestions - if(messageInputField.text.length === 0) { + if (messageInputField.text.length === 0) { root.suggestionQuery = "" root.suggestionList = [] return - } else if(messageInputField.text.startsWith(`${root.commandPrefix}model`)) { + } else if (messageInputField.text.startsWith(`${root.commandPrefix}model`)) { root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "" const modelResults = Fuzzy.go(root.suggestionQuery, Ai.modelList.map(model => { return { @@ -404,7 +404,7 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\) description: `${Ai.models[model.target].description}`, } }) - } else if(messageInputField.text.startsWith(`${root.commandPrefix}prompt`)) { + } else if (messageInputField.text.startsWith(`${root.commandPrefix}prompt`)) { root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "" const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.promptFiles.map(file => { return { @@ -422,6 +422,44 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\) description: `Load prompt from ${file.target}`, } }) + } else if (messageInputField.text.startsWith(`${root.commandPrefix}save`)) { + root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "" + const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.savedChats.map(file => { + return { + name: Fuzzy.prepare(file), + obj: file, + } + }), { + all: true, + key: "name" + }) + root.suggestionList = promptFileResults.map(file => { + const chatName = FileUtils.trimFileExt(FileUtils.fileNameForPath(file.target)).trim() + return { + name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "save ") : ""}${chatName}`, + displayName: `${chatName}`, + description: `Save chat from ${chatName}`, + } + }) + } else if (messageInputField.text.startsWith(`${root.commandPrefix}load`)) { + root.suggestionQuery = messageInputField.text.split(" ")[1] ?? "" + const promptFileResults = Fuzzy.go(root.suggestionQuery, Ai.savedChats.map(file => { + return { + name: Fuzzy.prepare(file), + obj: file, + } + }), { + all: true, + key: "name" + }) + root.suggestionList = promptFileResults.map(file => { + const chatName = FileUtils.trimFileExt(FileUtils.fileNameForPath(file.target)).trim() + return { + name: `${messageInputField.text.trim().split(" ").length == 1 ? (root.commandPrefix + "load ") : ""}${chatName}`, + displayName: `${chatName}`, + description: `Load chat from ${file.target}`, + } + }) } else if(messageInputField.text.startsWith(root.commandPrefix)) { root.suggestionQuery = messageInputField.text root.suggestionList = root.allCommands.filter(cmd => cmd.name.startsWith(messageInputField.text.substring(1))).map(cmd => { diff --git a/.config/quickshell/services/Ai.qml b/.config/quickshell/services/Ai.qml index 7ab1eb731..639ae936d 100644 --- a/.config/quickshell/services/Ai.qml +++ b/.config/quickshell/services/Ai.qml @@ -39,6 +39,7 @@ Singleton { property list defaultPrompts: [] property list userPrompts: [] property list promptFiles: [...defaultPrompts, ...userPrompts] + property list savedChats: [] // Model properties: // - name: Name of the model @@ -292,6 +293,20 @@ Singleton { } } + Process { + id: getSavedChats + running: true + command: ["ls", "-1", Directories.aiChats] + stdout: StdioCollector { + onStreamFinished: { + if (text.length === 0) return; + root.savedChats = text.split("\n") + .filter(fileName => fileName.endsWith(".json")) + .map(fileName => `${Directories.aiChats}/${fileName}`) + } + } + } + FileView { id: promptLoader watchChanges: false; @@ -797,6 +812,7 @@ Singleton { id: chatSaveFile property string chatName: "chat" path: `${Directories.aiChats}/${chatName}.json` + blockLoading: true } /** @@ -804,9 +820,10 @@ Singleton { * @param chatName name of the chat */ function saveChat(chatName) { - chatSaveFile.chatName = chatName + chatSaveFile.chatName = chatName.trim() const saveContent = JSON.stringify(root.chatToJson()) chatSaveFile.setText(saveContent) + getSavedChats.running = true; } /** @@ -815,9 +832,10 @@ Singleton { */ function loadChat(chatName) { try { - chatSaveFile.chatName = chatName + chatSaveFile.chatName = chatName.trim() + chatSaveFile.reload() const saveContent = chatSaveFile.text() - console.log(saveContent) + // console.log(saveContent) const saveData = JSON.parse(saveContent) root.clearMessages() root.messageIDs = saveData.map((_, i) => { @@ -843,6 +861,8 @@ Singleton { } } catch (e) { console.log("[AI] Could not load chat: ", e); + } finally { + getSavedChats.running = true; } } } From 813395c9873deab32895fd998e9729ee07c0845b Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:30:44 +0200 Subject: [PATCH 057/104] move weathericons.qml --- .config/quickshell/modules/bar/weather/WeatherBar.qml | 1 - .../{constants => modules/bar/weather}/WeatherIcons.qml | 0 2 files changed, 1 deletion(-) rename .config/quickshell/{constants => modules/bar/weather}/WeatherIcons.qml (100%) diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/modules/bar/weather/WeatherBar.qml index 5d54562d7..eae1b6132 100644 --- a/.config/quickshell/modules/bar/weather/WeatherBar.qml +++ b/.config/quickshell/modules/bar/weather/WeatherBar.qml @@ -1,7 +1,6 @@ pragma ComponentBehavior: Bound import "root:/modules/common" import "root:/modules/common/widgets" -import "root:/constants" import "root:/services" import Quickshell import QtQuick diff --git a/.config/quickshell/constants/WeatherIcons.qml b/.config/quickshell/modules/bar/weather/WeatherIcons.qml similarity index 100% rename from .config/quickshell/constants/WeatherIcons.qml rename to .config/quickshell/modules/bar/weather/WeatherIcons.qml From 52810b97f4435c28ba062d31a5a6cc688a829602 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:43:19 +0200 Subject: [PATCH 058/104] settings: apply colors on material palette selection --- .config/quickshell/modules/settings/StyleConfig.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/quickshell/modules/settings/StyleConfig.qml b/.config/quickshell/modules/settings/StyleConfig.qml index b86c0daa2..6de02639a 100644 --- a/.config/quickshell/modules/settings/StyleConfig.qml +++ b/.config/quickshell/modules/settings/StyleConfig.qml @@ -50,6 +50,7 @@ ContentPage { configOptionName: "appearance.palette.type" onSelected: (newValue) => { Config.options.appearance.palette.type = newValue; + Quickshell.execDetached(["bash", "-c", `${Directories.wallpaperSwitchScriptPath} --noswitch`]) } options: [ {"value": "auto", "displayName": "Auto"}, From 45369c1ec4703dd5a52ecdadd34f99182aa42543 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:43:44 +0200 Subject: [PATCH 059/104] appearance: not make bg color weird --- .config/quickshell/modules/common/Appearance.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/modules/common/Appearance.qml b/.config/quickshell/modules/common/Appearance.qml index c8b62350a..88e04bd30 100644 --- a/.config/quickshell/modules/common/Appearance.qml +++ b/.config/quickshell/modules/common/Appearance.qml @@ -100,7 +100,7 @@ Singleton { colors: QtObject { property color colSubtext: m3colors.m3outline - property color colLayer0: ColorUtils.mix(ColorUtils.transparentize(m3colors.m3background, root.transparency), m3colors.m3primary, Config.options.appearance.extraBackgroundTint ? 0.97 : 1) + property color colLayer0: ColorUtils.mix(ColorUtils.transparentize(m3colors.m3background, root.transparency), m3colors.m3primary, Config.options.appearance.extraBackgroundTint ? 0.99 : 1) property color colOnLayer0: m3colors.m3onBackground property color colLayer0Hover: ColorUtils.transparentize(ColorUtils.mix(colLayer0, colOnLayer0, 0.9, root.contentTransparency)) property color colLayer0Active: ColorUtils.transparentize(ColorUtils.mix(colLayer0, colOnLayer0, 0.8, root.contentTransparency)) From d801f132d1e8e0dc979a002a645053aca7896d00 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:56:54 +0200 Subject: [PATCH 060/104] bar: add outline to floating mode --- .config/quickshell/modules/bar/Bar.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index 27b188d02..5540db5e3 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -104,6 +104,8 @@ Scope { } color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" radius: Config.options.bar.cornerStyle === 1 ? Appearance.rounding.windowRounding : 0 + border.width: Config.options.bar.cornerStyle === 1 ? 1 : 0 + border.color: Appearance.m3colors.m3outlineVariant } MouseArea { // Left side | scroll to change brightness From 32380d29c8c93f99c820f18e6e1ba4101b1b0298 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 7 Jul 2025 17:57:05 +0200 Subject: [PATCH 061/104] settings: add osd timeout --- .../modules/settings/InterfaceConfig.qml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.config/quickshell/modules/settings/InterfaceConfig.qml b/.config/quickshell/modules/settings/InterfaceConfig.qml index 9e23fafba..ab9d24a3d 100644 --- a/.config/quickshell/modules/settings/InterfaceConfig.qml +++ b/.config/quickshell/modules/settings/InterfaceConfig.qml @@ -306,6 +306,20 @@ ContentPage { } } + ContentSection { + title: "On-screen display" + ConfigSpinBox { + text: "Timeout (ms)" + value: Config.options.osd.timeout + from: 100 + to: 3000 + stepSize: 100 + onValueChanged: { + Config.options.osd.timeout = value; + } + } + } + ContentSection { title: "Overview" ConfigSpinBox { From 2d6a897a66a679a0752febae51fc5532664fc734 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:17:57 +0200 Subject: [PATCH 062/104] settings: more options --- .../modules/settings/InterfaceConfig.qml | 15 +++++++++++++++ .../modules/settings/ServicesConfig.qml | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/.config/quickshell/modules/settings/InterfaceConfig.qml b/.config/quickshell/modules/settings/InterfaceConfig.qml index ab9d24a3d..2d692442c 100644 --- a/.config/quickshell/modules/settings/InterfaceConfig.qml +++ b/.config/quickshell/modules/settings/InterfaceConfig.qml @@ -356,4 +356,19 @@ ContentPage { } } } + + ContentSection { + title: "Screenshot tool" + + ConfigSwitch { + text: 'Show regions of potential interest' + checked: Config.options.screenshotTool.showContentRegions + onCheckedChanged: { + Config.options.screenshotTool.showContentRegions = checked; + } + StyledToolTip { + content: "Such regions could be images or parts of the screen that have some containment.\nMight not always be accurate.\nThis is done with an image processing algorithm run locally and no AI is used." + } + } + } } diff --git a/.config/quickshell/modules/settings/ServicesConfig.qml b/.config/quickshell/modules/settings/ServicesConfig.qml index af241d67a..f4f6bb28c 100644 --- a/.config/quickshell/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/modules/settings/ServicesConfig.qml @@ -137,4 +137,19 @@ ContentPage { } } } + + ContentSection { + title: "Search" + + ConfigSwitch { + text: "Use Levenshtein distance-based algorithm instead of fuzzy" + checked: Config.options.search.sloppy + onCheckedChanged: { + Config.options.search.sloppy = checked; + } + StyledToolTip { + content: "Could be better if you make a ton of typos,\nbut results can be weird and might not work with acronyms\n(e.g. \"GIMP\" might not give you the paint program)" + } + } + } } From b0750506cf82a9b4b6295a6b3a24a17511a60c65 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 09:40:59 +0700 Subject: [PATCH 063/104] give CustomIcon colorization --- .config/quickshell/modules/bar/Bar.qml | 6 +----- .../quickshell/modules/common/widgets/CustomIcon.qml | 12 ++++++++++++ .../modules/sidebarLeft/aiChat/AiMessage.qml | 7 ++----- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index 5540db5e3..a46779e9e 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -206,11 +206,7 @@ Scope { width: 19.5 height: 19.5 source: Config.options.bar.topLeftIcon == 'distro' ? SystemInfo.distroIcon : "spark-symbolic" - } - - ColorOverlay { - anchors.fill: distroIcon - source: distroIcon + colorize: true color: Appearance.colors.colOnLayer0 } } diff --git a/.config/quickshell/modules/common/widgets/CustomIcon.qml b/.config/quickshell/modules/common/widgets/CustomIcon.qml index 8905b0715..285196156 100644 --- a/.config/quickshell/modules/common/widgets/CustomIcon.qml +++ b/.config/quickshell/modules/common/widgets/CustomIcon.qml @@ -1,10 +1,13 @@ import QtQuick import Quickshell import Quickshell.Widgets +import Qt5Compat.GraphicalEffects Item { id: root + property bool colorize: false + property color color property string source: "" property string iconFolder: "root:/assets/icons" // The folder to check first width: 30 @@ -21,4 +24,13 @@ Item { } implicitSize: root.height } + + Loader { + active: root.colorize + anchors.fill: iconImage + sourceComponent: ColorOverlay { + source: iconImage + color: root.color + } + } } diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml b/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml index 3e5b96d3d..a483dd8a8 100644 --- a/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml +++ b/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml @@ -121,11 +121,8 @@ Rectangle { height: Appearance.font.pixelSize.large source: messageData?.role == 'assistant' ? Ai.models[messageData?.model].icon : messageData?.role == 'user' ? 'linux-symbolic' : 'desktop-symbolic' - } - ColorOverlay { - visible: modelIcon.visible - anchors.fill: modelIcon - source: modelIcon + + colorize: true color: Appearance.m3colors.m3onSecondaryContainer } From 8ca2ed6781c3ce4ab7b78617be6cc88c23bfac72 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 09:41:13 +0700 Subject: [PATCH 064/104] periodic table --- .../modules/cheatsheet/Cheatsheet.qml | 94 +++++++-- .../cheatsheet/CheatsheetPeriodicTable.qml | 73 +++++++ .../modules/cheatsheet/ElementTile.qml | 59 ++++++ .../modules/cheatsheet/periodic_table.js | 196 ++++++++++++++++++ 4 files changed, 408 insertions(+), 14 deletions(-) create mode 100644 .config/quickshell/modules/cheatsheet/CheatsheetPeriodicTable.qml create mode 100644 .config/quickshell/modules/cheatsheet/ElementTile.qml create mode 100644 .config/quickshell/modules/cheatsheet/periodic_table.js diff --git a/.config/quickshell/modules/cheatsheet/Cheatsheet.qml b/.config/quickshell/modules/cheatsheet/Cheatsheet.qml index 0edc121ee..8e409ab94 100644 --- a/.config/quickshell/modules/cheatsheet/Cheatsheet.qml +++ b/.config/quickshell/modules/cheatsheet/Cheatsheet.qml @@ -7,6 +7,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Effects import QtQuick.Layouts +import Qt5Compat.GraphicalEffects import Quickshell.Io import Quickshell import Quickshell.Widgets @@ -15,11 +16,22 @@ import Quickshell.Hyprland Scope { // Scope id: root + property var tabButtonList: [ + { + "icon": "keyboard", + "name": qsTr("Keybinds") + }, + { + "icon": "experiment", + "name": qsTr("Elements") + }, + ] + property int selectedTab: 0 Loader { id: cheatsheetLoader active: false - + sourceComponent: PanelWindow { // Window id: cheatsheetRoot visible: cheatsheetLoader.active @@ -32,7 +44,7 @@ Scope { // Scope } function hide() { - cheatsheetLoader.active = false + cheatsheetLoader.active = false; } exclusiveZone: 0 implicitWidth: cheatsheetBackground.width + Appearance.sizes.elevationMargin * 2 @@ -48,14 +60,14 @@ Scope { // Scope HyprlandFocusGrab { // Click outside to close id: grab - windows: [ cheatsheetRoot ] + windows: [cheatsheetRoot] active: cheatsheetRoot.visible onCleared: () => { - if (!active) cheatsheetRoot.hide() + if (!active) + cheatsheetRoot.hide(); } } - // Background StyledRectangularShadow { target: cheatsheetBackground @@ -71,9 +83,24 @@ Scope { // Scope implicitWidth: cheatsheetColumnLayout.implicitWidth + padding * 2 implicitHeight: cheatsheetColumnLayout.implicitHeight + padding * 2 - Keys.onPressed: (event) => { // Esc to close + Keys.onPressed: event => { // Esc to close if (event.key === Qt.Key_Escape) { - cheatsheetRoot.hide() + cheatsheetRoot.hide(); + } + if (event.modifiers === Qt.ControlModifier) { + if (event.key === Qt.Key_PageDown) { + root.selectedTab = Math.min(root.selectedTab + 1, root.tabButtonList.length - 1); + event.accepted = true; + } else if (event.key === Qt.Key_PageUp) { + root.selectedTab = Math.max(root.selectedTab - 1, 0); + event.accepted = true; + } else if (event.key === Qt.Key_Tab) { + root.selectedTab = (root.selectedTab + 1) % root.tabButtonList.length; + event.accepted = true; + } else if (event.key === Qt.Key_Backtab) { + root.selectedTab = (root.selectedTab - 1 + root.tabButtonList.length) % root.tabButtonList.length; + event.accepted = true; + } } } @@ -91,7 +118,7 @@ Scope { // Scope } onClicked: { - cheatsheetRoot.hide() + cheatsheetRoot.hide(); } contentItem: MaterialSymbol { @@ -114,10 +141,50 @@ Scope { // Scope font.pixelSize: Appearance.font.pixelSize.title text: qsTr("Cheat sheet") } - CheatsheetKeybinds {} + PrimaryTabBar { // Tab strip + id: tabBar + tabButtonList: root.tabButtonList + externalTrackedTab: root.selectedTab + function onCurrentIndexChanged(currentIndex) { + root.selectedTab = currentIndex; + } + } + + SwipeView { // Content pages + id: swipeView + Layout.topMargin: 5 + Layout.fillWidth: true + Layout.fillHeight: true + spacing: 10 + + Behavior on implicitWidth { + animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) + } + Behavior on implicitHeight { + animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) + } + + currentIndex: tabBar.externalTrackedTab + onCurrentIndexChanged: { + tabBar.enableIndicatorAnimation = true; + root.selectedTab = currentIndex; + } + + clip: true + layer.enabled: true + layer.effect: OpacityMask { + maskSource: Rectangle { + width: swipeView.width + height: swipeView.height + radius: Appearance.rounding.small + } + } + + CheatsheetKeybinds {} + CheatsheetPeriodicTable {} + } } } - } } @@ -125,15 +192,15 @@ Scope { // Scope target: "cheatsheet" function toggle(): void { - cheatsheetLoader.active = !cheatsheetLoader.active + cheatsheetLoader.active = !cheatsheetLoader.active; } function close(): void { - cheatsheetLoader.active = false + cheatsheetLoader.active = false; } function open(): void { - cheatsheetLoader.active = true + cheatsheetLoader.active = true; } } @@ -163,5 +230,4 @@ Scope { // Scope cheatsheetLoader.active = false; } } - } diff --git a/.config/quickshell/modules/cheatsheet/CheatsheetPeriodicTable.qml b/.config/quickshell/modules/cheatsheet/CheatsheetPeriodicTable.qml new file mode 100644 index 000000000..774c522e3 --- /dev/null +++ b/.config/quickshell/modules/cheatsheet/CheatsheetPeriodicTable.qml @@ -0,0 +1,73 @@ +import "root:/" +import "root:/services" +import "root:/modules/common" +import "root:/modules/common/widgets" +import "root:/modules/common/functions/file_utils.js" as FileUtils +import "periodic_table.js" as PTable +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Quickshell +import Quickshell.Io +import Quickshell.Widgets +import Quickshell.Hyprland + +Item { + id: root + readonly property var elements: PTable.elements + readonly property var series: PTable.series + property real spacing: 6 + implicitWidth: mainLayout.implicitWidth + implicitHeight: mainLayout.implicitHeight + + ColumnLayout { + id: mainLayout + spacing: root.spacing + + Repeater { // Main table rows + model: root.elements + + delegate: RowLayout { // Table cells + id: tableRow + spacing: root.spacing + required property var modelData + + Repeater { + model: tableRow.modelData + delegate: ElementTile { + required property var modelData + element: modelData + } + + } + } + + } + + Item { + id: gap + implicitHeight: 20 + } + + Repeater { // Main table rows + model: root.series + + delegate: RowLayout { // Table cells + id: seriesTableRow + spacing: root.spacing + required property var modelData + + Repeater { + model: seriesTableRow.modelData + delegate: ElementTile { + required property var modelData + element: modelData + } + + } + } + + } + } + +} \ No newline at end of file diff --git a/.config/quickshell/modules/cheatsheet/ElementTile.qml b/.config/quickshell/modules/cheatsheet/ElementTile.qml new file mode 100644 index 000000000..1784183bd --- /dev/null +++ b/.config/quickshell/modules/cheatsheet/ElementTile.qml @@ -0,0 +1,59 @@ +import "root:/modules/common" +import "root:/modules/common/widgets" +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Quickshell +import Quickshell.Io + +RippleButton { + id: root + required property var element + opacity: element.type != "empty" ? 1 : 0 + implicitHeight: 60 + implicitWidth: 60 + colBackground: Appearance.colors.colLayer2 + buttonRadius: Appearance.rounding.small + + Rectangle { + anchors { + top: parent.top + left: parent.left + topMargin: 4 + leftMargin: 4 + } + color: Appearance.colors.colSecondaryContainer + radius: Appearance.rounding.full + implicitWidth: Math.max(20, elementNumber.implicitWidth) + implicitHeight: Math.max(20, elementNumber.implicitHeight) + width: height + + StyledText { + id: elementNumber + anchors.centerIn: parent + color: Appearance.colors.colOnSecondaryContainer + text: root.element.number + font.pixelSize: Appearance.font.pixelSize.smaller + } + } + + StyledText { + id: elementSymbol + anchors.centerIn: parent + color: Appearance.colors.colOnLayer2 + font.pixelSize: Appearance.font.pixelSize.huge + text: root.element.symbol + } + + StyledText { + id: elementName + anchors { + horizontalCenter: parent.horizontalCenter + bottom: parent.bottom + bottomMargin: 4 + } + font.pixelSize: Appearance.font.pixelSize.smallest + color: Appearance.colors.colOnLayer2 + text: root.element.name + } +} diff --git a/.config/quickshell/modules/cheatsheet/periodic_table.js b/.config/quickshell/modules/cheatsheet/periodic_table.js new file mode 100644 index 000000000..45d69cc99 --- /dev/null +++ b/.config/quickshell/modules/cheatsheet/periodic_table.js @@ -0,0 +1,196 @@ +// List of rows +const elements = [ + [ + { name: 'Hydrogen', symbol: 'H', number: 1, weight: 1.01, type: 'nonmetal' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: 'Helium', symbol: 'He', number: 2, weight: 4.00, type: 'noblegas' }, + ], + [ + { name: 'Lithium', symbol: 'Li', number: 3, weight: 6.94, type: 'metal' }, + { name: 'Beryllium', symbol: 'Be', number: 4, weight: 9.01, type: 'metal' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: 'Boron', symbol: 'B', number: 5, weight: 10.81, type: 'nonmetal' }, + { name: 'Carbon', symbol: 'C', number: 6, weight: 12.01, type: 'nonmetal' }, + { name: 'Nitrogen', symbol: 'N', number: 7, weight: 14.01, type: 'nonmetal' }, + { name: 'Oxygen', symbol: 'O', number: 8, weight: 16, type: 'nonmetal' }, + { name: 'Fluorine', symbol: 'F', number: 9, weight: 19, type: 'nonmetal' }, + { name: 'Neon', symbol: 'Ne', number: 10, weight: 20.18, type: 'noblegas' }, + + + ], + [ + { name: 'Sodium', symbol: 'Na', number: 11, weight: 22.99, type: 'metal' }, + { name: 'Magnesium', symbol: 'Mg', number: 12, weight: 24.31, type: 'metal' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: 'Aluminum', symbol: 'Al', number: 13, weight: 26.98, type: 'metal' }, + { name: 'Silicon', symbol: 'Si', number: 14, weight: 28.09, type: 'nonmetal' }, + { name: 'Phosphorus', symbol: 'P', number: 15, weight: 30.97, type: 'nonmetal' }, + { name: 'Sulfur', symbol: 'S', number: 16, weight: 32.07, type: 'nonmetal' }, + { name: 'Chlorine', symbol: 'Cl', number: 17, weight: 35.45, type: 'nonmetal' }, + { name: 'Argon', symbol: 'Ar', number: 18, weight: 39.95, type: 'noblegas' }, + ], + [ + { name: 'Potassium', symbol: 'K', number: 19, weight: 39.098, type: 'metal' }, + { name: 'Calcium', symbol: 'Ca', number: 20, weight: 40.078, type: 'metal' }, + { name: 'Scandium', symbol: 'Sc', number: 21, weight: 44.956, type: 'metal' }, + { name: 'Titanium', symbol: 'Ti', number: 22, weight: 47.87, type: 'metal' }, + { name: 'Vanadium', symbol: 'V', number: 23, weight: 50.94, type: 'metal' }, + { name: 'Chromium', symbol: 'Cr', number: 24, weight: 52, type: 'metal'/*, icon: 'chromium-browser'*/ }, + { name: 'Manganese', symbol: 'Mn', number: 25, weight: 54.94, type: 'metal' }, + { name: 'Iron', symbol: 'Fe', number: 26, weight: 55.85, type: 'metal' }, + { name: 'Cobalt', symbol: 'Co', number: 27, weight: 58.93, type: 'metal' }, + { name: 'Nickel', symbol: 'Ni', number: 28, weight: 58.69, type: 'metal' }, + { name: 'Copper', symbol: 'Cu', number: 29, weight: 63.55, type: 'metal' }, + { name: 'Zinc', symbol: 'Zn', number: 30, weight: 65.38, type: 'metal' }, + { name: 'Gallium', symbol: 'Ga', number: 31, weight: 69.72, type: 'metal' }, + { name: 'Germanium', symbol: 'Ge', number: 32, weight: 72.63, type: 'metal' }, + { name: 'Arsenic', symbol: 'As', number: 33, weight: 74.92, type: 'nonmetal' }, + { name: 'Selenium', symbol: 'Se', number: 34, weight: 78.96, type: 'nonmetal' }, + { name: 'Bromine', symbol: 'Br', number: 35, weight: 79.904, type: 'nonmetal' }, + { name: 'Krypton', symbol: 'Kr', number: 36, weight: 83.8, type: 'noblegas' }, + ], + [ + { name: 'Rubidium', symbol: 'Rb', number: 37, weight: 85.47, type: 'metal' }, + { name: 'Strontium', symbol: 'Sr', number: 38, weight: 87.62, type: 'metal' }, + { name: 'Yttrium', symbol: 'Y', number: 39, weight: 88.91, type: 'metal' }, + { name: 'Zirconium', symbol: 'Zr', number: 40, weight: 91.22, type: 'metal' }, + { name: 'Niobium', symbol: 'Nb', number: 41, weight: 92.91, type: 'metal' }, + { name: 'Molybdenum', symbol: 'Mo', number: 42, weight: 95.94, type: 'metal' }, + { name: 'Technetium', symbol: 'Tc', number: 43, weight: 98, type: 'metal' }, + { name: 'Ruthenium', symbol: 'Ru', number: 44, weight: 101.07, type: 'metal' }, + { name: 'Rhodium', symbol: 'Rh', number: 45, weight: 102.91, type: 'metal' }, + { name: 'Palladium', symbol: 'Pd', number: 46, weight: 106.42, type: 'metal' }, + { name: 'Silver', symbol: 'Ag', number: 47, weight: 107.87, type: 'metal' }, + { name: 'Cadmium', symbol: 'Cd', number: 48, weight: 112.41, type: 'metal' }, + { name: 'Indium', symbol: 'In', number: 49, weight: 114.82, type: 'metal' }, + { name: 'Tin', symbol: 'Sn', number: 50, weight: 118.71, type: 'metal' }, + { name: 'Antimony', symbol: 'Sb', number: 51, weight: 121.76, type: 'metal' }, + { name: 'Tellurium', symbol: 'Te', number: 52, weight: 127.6, type: 'nonmetal' }, + { name: 'Iodine', symbol: 'I', number: 53, weight: 126.9, type: 'nonmetal' }, + { name: 'Xenon', symbol: 'Xe', number: 54, weight: 131.29, type: 'noblegas' }, + ], + [ + { name: 'Cesium', symbol: 'Cs', number: 55, weight: 132.91, type: 'metal' }, + { name: 'Barium', symbol: 'Ba', number: 56, weight: 137.33, type: 'metal' }, + { name: 'Lanthanum', symbol: 'La', number: 57, weight: 138.91, type: 'lanthanum' }, + { name: 'Hafnium', symbol: 'Hf', number: 72, weight: 178.49, type: 'metal' }, + { name: 'Tantalum', symbol: 'Ta', number: 73, weight: 180.95, type: 'metal' }, + { name: 'Tungsten', symbol: 'W', number: 74, weight: 183.84, type: 'metal' }, + { name: 'Rhenium', symbol: 'Re', number: 75, weight: 186.21, type: 'metal' }, + { name: 'Osmium', symbol: 'Os', number: 76, weight: 190.23, type: 'metal' }, + { name: 'Iridium', symbol: 'Ir', number: 77, weight: 192.22, type: 'metal' }, + { name: 'Platinum', symbol: 'Pt', number: 78, weight: 195.09, type: 'metal' }, + { name: 'Gold', symbol: 'Au', number: 79, weight: 196.97, type: 'metal' }, + { name: 'Mercury', symbol: 'Hg', number: 80, weight: 200.59, type: 'metal' }, + { name: 'Thallium', symbol: 'Tl', number: 81, weight: 204.38, type: 'metal' }, + { name: 'Lead', symbol: 'Pb', number: 82, weight: 207.2, type: 'metal' }, + { name: 'Bismuth', symbol: 'Bi', number: 83, weight: 208.98, type: 'metal' }, + { name: 'Polonium', symbol: 'Po', number: 84, weight: 209, type: 'metal' }, + { name: 'Astatine', symbol: 'At', number: 85, weight: 210, type: 'nonmetal' }, + { name: 'Radon', symbol: 'Rn', number: 86, weight: 222, type: 'noblegas' }, + ], + [ + { name: 'Francium', symbol: 'Fr', number: 87, weight: 223, type: 'metal' }, + { name: 'Radium', symbol: 'Ra', number: 88, weight: 226, type: 'metal' }, + { name: 'Actinium', symbol: 'Ac', number: 89, weight: 227, type: 'actinium' }, + { name: 'Rutherfordium', symbol: 'Rf', number: 104, weight: 267, type: 'metal' }, + { name: 'Dubnium', symbol: 'Db', number: 105, weight: 268, type: 'metal' }, + { name: 'Seaborgium', symbol: 'Sg', number: 106, weight: 271, type: 'metal' }, + { name: 'Bohrium', symbol: 'Bh', number: 107, weight: 272, type: 'metal' }, + { name: 'Hassium', symbol: 'Hs', number: 108, weight: 277, type: 'metal' }, + { name: 'Meitnerium', symbol: 'Mt', number: 109, weight: 278, type: 'metal' }, + { name: 'Darmstadtium', symbol: 'Ds', number: 110, weight: 281, type: 'metal' }, + { name: 'Roentgenium', symbol: 'Rg', number: 111, weight: 280, type: 'metal' }, + { name: 'Copernicium', symbol: 'Cn', number: 112, weight: 285, type: 'metal' }, + { name: 'Nihonium', symbol: 'Nh', number: 113, weight: 286, type: 'metal' }, + { name: 'Flerovium', symbol: 'Fl', number: 114, weight: 289, type: 'metal' }, + { name: 'Moscovium', symbol: 'Mc', number: 115, weight: 290, type: 'metal' }, + { name: 'Livermorium', symbol: 'Lv', number: 116, weight: 293, type: 'metal' }, + { name: 'Tennessine', symbol: 'Ts', number: 117, weight: 294, type: 'metal' }, + { name: 'Oganesson', symbol: 'Og', number: 118, weight: 294, type: 'noblegas' }, + ], +] + +const series = [ + [ + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: 'Cerium', symbol: 'Ce', number: 58, weight: 140.12, type: 'lanthanum' }, + { name: 'Praseodymium', symbol: 'Pr', number: 59, weight: 140.91, type: 'lanthanum' }, + { name: 'Neodymium', symbol: 'Nd', number: 60, weight: 144.24, type: 'lanthanum' }, + { name: 'Promethium', symbol: 'Pm', number: 61, weight: 145, type: 'lanthanum' }, + { name: 'Samarium', symbol: 'Sm', number: 62, weight: 150.36, type: 'lanthanum' }, + { name: 'Europium', symbol: 'Eu', number: 63, weight: 151.96, type: 'lanthanum' }, + { name: 'Gadolinium', symbol: 'Gd', number: 64, weight: 157.25, type: 'lanthanum' }, + { name: 'Terbium', symbol: 'Tb', number: 65, weight: 158.93, type: 'lanthanum' }, + { name: 'Dysprosium', symbol: 'Dy', number: 66, weight: 162.5, type: 'lanthanum' }, + { name: 'Holmium', symbol: 'Ho', number: 67, weight: 164.93, type: 'lanthanum' }, + { name: 'Erbium', symbol: 'Er', number: 68, weight: 167.26, type: 'lanthanum' }, + { name: 'Thulium', symbol: 'Tm', number: 69, weight: 168.93, type: 'lanthanum' }, + { name: 'Ytterbium', symbol: 'Yb', number: 70, weight: 173.04, type: 'lanthanum' }, + { name: 'Lutetium', symbol: 'Lu', number: 71, weight: 174.97, type: 'lanthanum' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + ], + [ + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + { name: 'Thorium', symbol: 'Th', number: 90, weight: 232.04, type: 'actinium' }, + { name: 'Protactinium', symbol: 'Pa', number: 91, weight: 231.04, type: 'actinium' }, + { name: 'Uranium', symbol: 'U', number: 92, weight: 238.03, type: 'actinium' }, + { name: 'Neptunium', symbol: 'Np', number: 93, weight: 237, type: 'actinium' }, + { name: 'Plutonium', symbol: 'Pu', number: 94, weight: 244, type: 'actinium' }, + { name: 'Americium', symbol: 'Am', number: 95, weight: 243, type: 'actinium' }, + { name: 'Curium', symbol: 'Cm', number: 96, weight: 247, type: 'actinium' }, + { name: 'Berkelium', symbol: 'Bk', number: 97, weight: 247, type: 'actinium' }, + { name: 'Californium', symbol: 'Cf', number: 98, weight: 251, type: 'actinium' }, + { name: 'Einsteinium', symbol: 'Es', number: 99, weight: 252, type: 'actinium' }, + { name: 'Fermium', symbol: 'Fm', number: 100, weight: 257, type: 'actinium' }, + { name: 'Mendelevium', symbol: 'Md', number: 101, weight: 258, type: 'actinium' }, + { name: 'Nobelium', symbol: 'No', number: 102, weight: 259, type: 'actinium' }, + { name: 'Lawrencium', symbol: 'Lr', number: 103, weight: 262, type: 'actinium' }, + { name: '', symbol: '', number: -1, weight: 0, type: 'empty' }, + ], +]; + +const niceTypes = { + 'metal': "Metal", + 'nonmetal': "Nonmetal", + 'noblegas': "Noble gas", + 'lanthanum': "Lanthanum", + 'actinium': "Actinium" +} From a0301bbc1392c44f1ad9b2453859cfdb3b2e5c9c Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 09:46:10 +0700 Subject: [PATCH 065/104] settings: add search prefixes --- .../modules/settings/ServicesConfig.qml | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/.config/quickshell/modules/settings/ServicesConfig.qml b/.config/quickshell/modules/settings/ServicesConfig.qml index f4f6bb28c..ea4fac69b 100644 --- a/.config/quickshell/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/modules/settings/ServicesConfig.qml @@ -151,5 +151,52 @@ ContentPage { content: "Could be better if you make a ton of typos,\nbut results can be weird and might not work with acronyms\n(e.g. \"GIMP\" might not give you the paint program)" } } + + ContentSubsection { + title: "Prefixes" + ConfigRow { + uniform: true + + MaterialTextField { + Layout.fillWidth: true + placeholderText: "Action" + text: Config.options.search.prefix.action + wrapMode: TextEdit.Wrap + onTextChanged: { + Config.options.search.prefix.action = text; + } + } + MaterialTextField { + Layout.fillWidth: true + placeholderText: "Clipboard" + text: Config.options.search.prefix.clipboard + wrapMode: TextEdit.Wrap + onTextChanged: { + Config.options.search.prefix.clipboard = text; + } + } + MaterialTextField { + Layout.fillWidth: true + placeholderText: "Emojis" + text: Config.options.search.prefix.emojis + wrapMode: TextEdit.Wrap + onTextChanged: { + Config.options.search.prefix.emojis = text; + } + } + } + } + ContentSubsection { + title: "Web search" + MaterialTextField { + Layout.fillWidth: true + placeholderText: "Base URL" + text: Config.options.search.engineBaseUrl + wrapMode: TextEdit.Wrap + onTextChanged: { + Config.options.search.engineBaseUrl = text; + } + } + } } } From 9a90d26e8109d9f43d76e1b9c0a7447004abb8df Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:13:37 +0700 Subject: [PATCH 066/104] right sidebar: cloudflare warp --- .../modules/common/widgets/ButtonGroup.qml | 1 + .../modules/sidebarRight/SidebarRight.qml | 1 + .../quickToggles/CloudflareWarp.qml | 89 +++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 .config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml diff --git a/.config/quickshell/modules/common/widgets/ButtonGroup.qml b/.config/quickshell/modules/common/widgets/ButtonGroup.qml index 5356535f4..4b8676f40 100644 --- a/.config/quickshell/modules/common/widgets/ButtonGroup.qml +++ b/.config/quickshell/modules/common/widgets/ButtonGroup.qml @@ -20,6 +20,7 @@ Rectangle { let total = 0; for (let i = 0; i < rowLayout.children.length; ++i) { const child = rowLayout.children[i]; + if (!child.visible) continue; total += child.baseWidth ?? child.implicitWidth ?? child.width; } return total + rowLayout.spacing * (rowLayout.children.length - 1); diff --git a/.config/quickshell/modules/sidebarRight/SidebarRight.qml b/.config/quickshell/modules/sidebarRight/SidebarRight.qml index 376687af3..71ce53dbd 100644 --- a/.config/quickshell/modules/sidebarRight/SidebarRight.qml +++ b/.config/quickshell/modules/sidebarRight/SidebarRight.qml @@ -179,6 +179,7 @@ Scope { NightLight {} GameMode {} IdleInhibitor {} + CloudflareWarp {} } // Center widget group diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml b/.config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml new file mode 100644 index 000000000..7f6aba21b --- /dev/null +++ b/.config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml @@ -0,0 +1,89 @@ +import "root:/modules/common" +import "root:/modules/common/widgets" +import "../" +import QtQuick +import Quickshell.Io +import Quickshell +import Quickshell.Hyprland + +QuickToggleButton { + id: root + toggled: false + visible: false + + contentItem: CustomIcon { + id: distroIcon + source: 'cloudflare-dns-symbolic' + + anchors.centerIn: parent + width: 12 + height: 12 + colorize: true + color: root.toggled ? Appearance.m3colors.m3onPrimary : Appearance.colors.colOnLayer1 + + Behavior on color { + animation: Appearance.animation.elementMoveFast.colorAnimation.createObject(this) + } + } + + onClicked: { + if (toggled) { + root.toggled = false + Quickshell.execDetached(["warp-cli", "disconnect"]) + } else { + root.toggled = true + Quickshell.execDetached(["warp-cli", "connect"]) + } + } + + Process { + id: connectProc + command: ["warp-cli", "connect"] + onExited: (exitCode, exitStatus) => { + console.log("Warp connection exited with code and status:", exitCode, exitStatus) + if (exitCode === 0) { + connectProc.running = true + } else { + console.error("Warp connection failed, please check your connection or try again later.") + } + } + } + + Process { + id: registrationProc + command: ["warp-cli", "registration", "new"] + onExited: (exitCode, exitStatus) => { + console.log("Warp registration exited with code and status:", exitCode, exitStatus) + if (exitCode === 0) { + connectProc.running = true + } else { + Quickshell.execDetached(["notify-send", "Cloudflare Warp", "Registration failed. Please inspect manually with the warp-cli command", "-a", "Shell"]) + } + } + } + + Process { + id: fetchActiveState + running: true + command: ["bash", "-c", "warp-cli status"] + stdout: StdioCollector { + id: warpStatusCollector + onStreamFinished: { + if (warpStatusCollector.text.length > 0) { + console.log("Showing warp") + root.visible = true + } + if (warpStatusCollector.text.includes("Unable")) { + registrationProc.running = true + } else if (warpStatusCollector.text.includes("Connected")) { + root.toggled = true + } else if (warpStatusCollector.text.includes("Disconnected")) { + root.toggled = false + } + } + } + } + StyledToolTip { + content: qsTr("Cloudflare WARP (1.1.1.1)") + } +} From 5081b2e9d174588a8418c385a828d71be69966fc Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:16:03 +0700 Subject: [PATCH 067/104] unfuck startup wallpaper for multimonitor --- .config/hypr/hyprland/execs.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/hypr/hyprland/execs.conf b/.config/hypr/hyprland/execs.conf index 9d4747a90..b723454a9 100644 --- a/.config/hypr/hyprland/execs.conf +++ b/.config/hypr/hyprland/execs.conf @@ -1,7 +1,7 @@ # Bar, wallpaper -exec-once = swww-daemon --format xrgb --no-cache -exec-once = sleep 0.5; swww img "$(cat ~/.local/state/quickshell/user/generated/wallpaper/path.txt)" --transition-step 100 --transition-fps 120 --transition-type grow --transition-angle 30 --transition-duration 1 exec-once = ~/.config/hypr/hyprland/scripts/start_geoclue_agent.sh & gammastep +exec-once = sleep 0.7; [ "$(hyprctl monitors -j | jq 'length')" -eq 1 ] && swww-daemon --format xrgb --no-cache || swww-daemon --format xrgb +exec-once = sleep 0.7; swww img "$(cat ~/.local/state/quickshell/user/generated/wallpaper/path.txt)" --transition-step 100 --transition-fps 120 --transition-type grow --transition-angle 30 --transition-duration 1 exec-once = qs & # Input method From 8ba91edeaea23772381b96c1020cbf29bf07c630 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 10:41:49 +0700 Subject: [PATCH 068/104] make screencorners exit more nicely --- .config/hypr/hyprland/rules.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/hypr/hyprland/rules.conf b/.config/hypr/hyprland/rules.conf index 2465cc0b8..0e324f5da 100644 --- a/.config/hypr/hyprland/rules.conf +++ b/.config/hypr/hyprland/rules.conf @@ -135,6 +135,7 @@ layerrule = animation fade, quickshell:notificationPopup layerrule = blur, quickshell:backgroundWidgets layerrule = ignorealpha 0.05, quickshell:backgroundWidgets layerrule = noanim, quickshell:screenshot +layerrule = animation popin 120%, quickshell:screenCorners # Launchers need to be FAST From b6f0d001373c3c48a9cfd3cb609dfc27789eb5a7 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:41:16 +0700 Subject: [PATCH 069/104] overview: unfuck window moving on offset monitors --- .../quickshell/modules/overview/OverviewWidget.qml | 13 ++++++++++--- .../quickshell/modules/overview/OverviewWindow.qml | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.config/quickshell/modules/overview/OverviewWidget.qml b/.config/quickshell/modules/overview/OverviewWidget.qml index a17cc0453..9bc88a092 100644 --- a/.config/quickshell/modules/overview/OverviewWidget.qml +++ b/.config/quickshell/modules/overview/OverviewWidget.qml @@ -172,11 +172,19 @@ Item { property var monitor: HyprlandData.monitors[monitorId] property bool atInitPosition: (initX == x && initY == y) - restrictToWorkspace: Drag.active || atInitPosition property int workspaceColIndex: (windowData?.workspace.id - 1) % Config.options.overview.columns property int workspaceRowIndex: Math.floor((windowData?.workspace.id - 1) % root.workspacesShown / Config.options.overview.columns) - xOffset: (root.workspaceImplicitWidth + workspaceSpacing) * workspaceColIndex - (monitor?.x * root.scale) + xOffset: { + console.log("[OverviewWidget] " + windowData?.address + " title:", windowData?.title) + console.log("[OverviewWidget] workspaceColIndex:", workspaceColIndex) + console.log("[OverviewWidget] root.workspaceImplicitWidth:", root.workspaceImplicitWidth) + console.log("[OverviewWidget] workspaceSpacing:", workspaceSpacing) + console.log("[OverviewWidget] monitor?.x:", monitor?.x) + console.log("[OverviewWidget] root.scale:", root.scale) + console.log("[OverviewWidget] xOffset:", (root.workspaceImplicitWidth + workspaceSpacing) * workspaceColIndex - (monitor?.x * root.scale)) + return (root.workspaceImplicitWidth + workspaceSpacing) * workspaceColIndex - (monitor?.x * root.scale) + } yOffset: (root.workspaceImplicitHeight + workspaceSpacing) * workspaceRowIndex - (monitor?.y * root.scale) Timer { @@ -187,7 +195,6 @@ Item { onTriggered: { window.x = Math.round(Math.max((windowData?.at[0] - monitorData?.reserved[0]) * root.scale, 0) + xOffset) window.y = Math.round(Math.max((windowData?.at[1] - monitorData?.reserved[1]) * root.scale, 0) + yOffset) - // console.log(`[OverviewWindow] Updated position for window ${windowData?.address} to (${window.x}, ${window.y})`) } } diff --git a/.config/quickshell/modules/overview/OverviewWindow.qml b/.config/quickshell/modules/overview/OverviewWindow.qml index b749ab160..56e1d1067 100644 --- a/.config/quickshell/modules/overview/OverviewWindow.qml +++ b/.config/quickshell/modules/overview/OverviewWindow.qml @@ -42,8 +42,8 @@ Item { // Window x: initX y: initY - width: Math.round(Math.min(windowData?.size[0] * root.scale, (restrictToWorkspace ? windowData?.size[0] : availableWorkspaceWidth - x + xOffset))) - height: Math.round(Math.min(windowData?.size[1] * root.scale, (restrictToWorkspace ? windowData?.size[1] : availableWorkspaceHeight - y + yOffset))) + width: windowData?.size[0] * root.scale + height: windowData?.size[1] * root.scale layer.enabled: true layer.effect: OpacityMask { From a8f52a5adf87fa28a877faec453e24155f30a09e Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:35:27 +0700 Subject: [PATCH 070/104] search: adjust highlight color --- .../modules/overview/SearchItem.qml | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/.config/quickshell/modules/overview/SearchItem.qml b/.config/quickshell/modules/overview/SearchItem.qml index d23cb4c09..495ba8f9e 100644 --- a/.config/quickshell/modules/overview/SearchItem.qml +++ b/.config/quickshell/modules/overview/SearchItem.qml @@ -27,6 +27,21 @@ RippleButton { property string bigText: entry?.bigText ?? "" property string materialSymbol: entry?.materialSymbol ?? "" property string cliphistRawString: entry?.cliphistRawString ?? "" + + visible: root.entryShown + property int horizontalMargin: 10 + property int buttonHorizontalPadding: 10 + property int buttonVerticalPadding: 5 + property bool keyboardDown: false + + implicitHeight: rowLayout.implicitHeight + root.buttonVerticalPadding * 2 + implicitWidth: rowLayout.implicitWidth + root.buttonHorizontalPadding * 2 + buttonRadius: Appearance.rounding.normal + colBackground: (root.down || root.keyboardDown) ? Appearance.colors.colSecondaryContainerActive : + ((root.hovered || root.focus) ? Appearance.colors.colSecondaryContainerHover : + ColorUtils.transparentize(Appearance.colors.colSecondaryContainer, 1)) + colBackgroundHover: Appearance.colors.colSecondaryContainerHover + colRipple: Appearance.colors.colSecondaryContainerActive property string highlightPrefix: `` property string highlightSuffix: `` @@ -69,20 +84,7 @@ RippleButton { return matches ? matches : []; } - visible: root.entryShown - property int horizontalMargin: 10 - property int buttonHorizontalPadding: 10 - property int buttonVerticalPadding: 5 - property bool keyboardDown: false - - implicitHeight: rowLayout.implicitHeight + root.buttonVerticalPadding * 2 - implicitWidth: rowLayout.implicitWidth + root.buttonHorizontalPadding * 2 - buttonRadius: Appearance.rounding.normal - colBackground: (root.down || root.keyboardDown) ? Appearance.colors.colLayer1Active : - ((root.hovered || root.focus) ? Appearance.colors.colLayer1Hover : - ColorUtils.transparentize(Appearance.colors.colSurfaceContainerHigh, 1)) - colBackgroundHover: Appearance.colors.colLayer1Hover - colRipple: Appearance.colors.colLayer1Active + PointingHandInteraction {} background { anchors.fill: root @@ -90,7 +92,6 @@ RippleButton { anchors.rightMargin: root.horizontalMargin } - PointingHandInteraction {} onClicked: { root.itemExecute() Hyprland.dispatch("global quickshell:overviewClose") From d572f4a113ae44be74ff3aff6d07c7c3214c1b10 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:36:07 +0700 Subject: [PATCH 071/104] switchwall: unfuck wallpaper query on multimonitor (#1581) --- .config/quickshell/scripts/colors/switchwall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/scripts/colors/switchwall.sh b/.config/quickshell/scripts/colors/switchwall.sh index 560a8cfc7..11cf2a432 100755 --- a/.config/quickshell/scripts/colors/switchwall.sh +++ b/.config/quickshell/scripts/colors/switchwall.sh @@ -297,7 +297,7 @@ main() { ;; --noswitch) noswitch_flag="1" - imgpath=$(swww query | awk -F 'image: ' '{print $2}') + imgpath=$(swww query | head -1 | awk -F 'image: ' '{print $2}') shift ;; *) From 9293ffdb26f7308bc27bbb8b9427c90d748ad359 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 22:32:18 +0700 Subject: [PATCH 072/104] bar: clock: use shorter day of week (by default) --- .config/quickshell/modules/common/Config.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/modules/common/Config.qml index b8a051b54..5d427a977 100644 --- a/.config/quickshell/modules/common/Config.qml +++ b/.config/quickshell/modules/common/Config.qml @@ -211,7 +211,7 @@ Singleton { property JsonObject time: JsonObject { // https://doc.qt.io/qt-6/qtime.html#toString property string format: "hh:mm" - property string dateFormat: "dddd, dd/MM" + property string dateFormat: "ddd, dd/MM" } property JsonObject windows: JsonObject { From 465660db073b3d68697b14a2db09396b815c6a4e Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 22:32:26 +0700 Subject: [PATCH 073/104] overview: remove debug print --- .config/quickshell/modules/overview/OverviewWidget.qml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.config/quickshell/modules/overview/OverviewWidget.qml b/.config/quickshell/modules/overview/OverviewWidget.qml index 9bc88a092..b1602774c 100644 --- a/.config/quickshell/modules/overview/OverviewWidget.qml +++ b/.config/quickshell/modules/overview/OverviewWidget.qml @@ -176,13 +176,6 @@ Item { property int workspaceColIndex: (windowData?.workspace.id - 1) % Config.options.overview.columns property int workspaceRowIndex: Math.floor((windowData?.workspace.id - 1) % root.workspacesShown / Config.options.overview.columns) xOffset: { - console.log("[OverviewWidget] " + windowData?.address + " title:", windowData?.title) - console.log("[OverviewWidget] workspaceColIndex:", workspaceColIndex) - console.log("[OverviewWidget] root.workspaceImplicitWidth:", root.workspaceImplicitWidth) - console.log("[OverviewWidget] workspaceSpacing:", workspaceSpacing) - console.log("[OverviewWidget] monitor?.x:", monitor?.x) - console.log("[OverviewWidget] root.scale:", root.scale) - console.log("[OverviewWidget] xOffset:", (root.workspaceImplicitWidth + workspaceSpacing) * workspaceColIndex - (monitor?.x * root.scale)) return (root.workspaceImplicitWidth + workspaceSpacing) * workspaceColIndex - (monitor?.x * root.scale) } yOffset: (root.workspaceImplicitHeight + workspaceSpacing) * workspaceRowIndex - (monitor?.y * root.scale) From f865ed877dee8a8d871d221cc68e918d9858faa7 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Wed, 9 Jul 2025 22:33:11 +0700 Subject: [PATCH 074/104] sidebar: warp: no weird connection loop --- .../sidebarRight/quickToggles/CloudflareWarp.qml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml b/.config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml index 7f6aba21b..cdaf84b76 100644 --- a/.config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml +++ b/.config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml @@ -16,8 +16,7 @@ QuickToggleButton { source: 'cloudflare-dns-symbolic' anchors.centerIn: parent - width: 12 - height: 12 + height: 16 colorize: true color: root.toggled ? Appearance.m3colors.m3onPrimary : Appearance.colors.colOnLayer1 @@ -40,11 +39,8 @@ QuickToggleButton { id: connectProc command: ["warp-cli", "connect"] onExited: (exitCode, exitStatus) => { - console.log("Warp connection exited with code and status:", exitCode, exitStatus) - if (exitCode === 0) { - connectProc.running = true - } else { - console.error("Warp connection failed, please check your connection or try again later.") + if (exitCode !== 0) { + Quickshell.execDetached(["notify-send", "Cloudflare WARP", "Connection failed. Please inspect manually with the warp-cli command", "-a", "Shell"]) } } } @@ -57,7 +53,7 @@ QuickToggleButton { if (exitCode === 0) { connectProc.running = true } else { - Quickshell.execDetached(["notify-send", "Cloudflare Warp", "Registration failed. Please inspect manually with the warp-cli command", "-a", "Shell"]) + Quickshell.execDetached(["notify-send", "Cloudflare WARP", "Registration failed. Please inspect manually with the warp-cli command", "-a", "Shell"]) } } } From 7afea39f1dcb9588c5e78c2d1bab95c73674dc7b Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 10 Jul 2025 10:54:46 +0700 Subject: [PATCH 075/104] cheatsheet: periodic table: adjust colors --- .config/quickshell/modules/cheatsheet/ElementTile.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.config/quickshell/modules/cheatsheet/ElementTile.qml b/.config/quickshell/modules/cheatsheet/ElementTile.qml index 1784183bd..baeb72ad6 100644 --- a/.config/quickshell/modules/cheatsheet/ElementTile.qml +++ b/.config/quickshell/modules/cheatsheet/ElementTile.qml @@ -22,7 +22,7 @@ RippleButton { topMargin: 4 leftMargin: 4 } - color: Appearance.colors.colSecondaryContainer + color: Appearance.colors.colLayer2 radius: Appearance.rounding.full implicitWidth: Math.max(20, elementNumber.implicitWidth) implicitHeight: Math.max(20, elementNumber.implicitHeight) @@ -31,16 +31,16 @@ RippleButton { StyledText { id: elementNumber anchors.centerIn: parent - color: Appearance.colors.colOnSecondaryContainer + color: Appearance.colors.colOnLayer2 text: root.element.number - font.pixelSize: Appearance.font.pixelSize.smaller + font.pixelSize: Appearance.font.pixelSize.smallest } } StyledText { id: elementSymbol anchors.centerIn: parent - color: Appearance.colors.colOnLayer2 + color: Appearance.colors.colSecondary font.pixelSize: Appearance.font.pixelSize.huge text: root.element.symbol } From 280f7ff8c0c4e9d08813847ab961b479e30ee545 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 10 Jul 2025 10:55:08 +0700 Subject: [PATCH 076/104] bar: activewindow: more accurate on multimonitor systems --- .../quickshell/modules/bar/ActiveWindow.qml | 14 ++- .config/quickshell/modules/bar/Workspaces.qml | 9 +- .config/quickshell/services/HyprlandData.qml | 96 ++++++++++++++----- 3 files changed, 85 insertions(+), 34 deletions(-) diff --git a/.config/quickshell/modules/bar/ActiveWindow.qml b/.config/quickshell/modules/bar/ActiveWindow.qml index 95e25c6f2..d9f069c61 100644 --- a/.config/quickshell/modules/bar/ActiveWindow.qml +++ b/.config/quickshell/modules/bar/ActiveWindow.qml @@ -1,3 +1,4 @@ +import "root:/services" import "root:/modules/common" import "root:/modules/common/widgets" import QtQuick @@ -11,6 +12,10 @@ Item { readonly property HyprlandMonitor monitor: Hyprland.monitorFor(bar.screen) readonly property Toplevel activeWindow: ToplevelManager.activeToplevel + property string activeWindowAddress: `0x${activeWindow.HyprlandToplevel.address}` + property bool focusingThisMonitor: HyprlandData.activeWorkspace.monitor == monitor.name + property var biggestWindow: HyprlandData.biggestWindowForWorkspace(HyprlandData.monitors[root.monitor.id].activeWorkspace.id) + implicitWidth: colLayout.implicitWidth ColumnLayout { @@ -26,7 +31,10 @@ Item { font.pixelSize: Appearance.font.pixelSize.smaller color: Appearance.colors.colSubtext elide: Text.ElideRight - text: root.activeWindow?.activated ? root.activeWindow?.appId : qsTr("Desktop") + text: root.focusingThisMonitor && root.activeWindow?.activated && root.biggestWindow ? + root.activeWindow?.appId : + (root.biggestWindow?.class) ?? qsTr("Desktop") + } StyledText { @@ -34,7 +42,9 @@ Item { font.pixelSize: Appearance.font.pixelSize.small color: Appearance.colors.colOnLayer0 elide: Text.ElideRight - text: root.activeWindow?.activated ? root.activeWindow?.title : `${qsTr("Workspace")} ${monitor.activeWorkspace?.id}` + text: root.focusingThisMonitor && root.activeWindow?.activated && root.biggestWindow ? + root.activeWindow?.title : + (root.biggestWindow?.title) ?? `${qsTr("Workspace")} ${monitor.activeWorkspace?.id}` } } diff --git a/.config/quickshell/modules/bar/Workspaces.qml b/.config/quickshell/modules/bar/Workspaces.qml index f91cdaa93..f4d7c73d0 100644 --- a/.config/quickshell/modules/bar/Workspaces.qml +++ b/.config/quickshell/modules/bar/Workspaces.qml @@ -173,14 +173,7 @@ Item { id: workspaceButtonBackground implicitWidth: workspaceButtonWidth implicitHeight: workspaceButtonWidth - property var biggestWindow: { - const windowsInThisWorkspace = HyprlandData.windowList.filter(w => w.workspace.id == button.workspaceValue) - return windowsInThisWorkspace.reduce((maxWin, win) => { - const maxArea = (maxWin?.size?.[0] ?? 0) * (maxWin?.size?.[1] ?? 0) - const winArea = (win?.size?.[0] ?? 0) * (win?.size?.[1] ?? 0) - return winArea > maxArea ? win : maxWin - }, null) - } + property var biggestWindow: HyprlandData.biggestWindowForWorkspace(button.workspaceValue) property var mainAppIconSource: Quickshell.iconPath(AppSearch.guessIcon(biggestWindow?.class), "image-missing") StyledText { // Workspace number text diff --git a/.config/quickshell/services/HyprlandData.qml b/.config/quickshell/services/HyprlandData.qml index edd4e8eaa..fb3600704 100644 --- a/.config/quickshell/services/HyprlandData.qml +++ b/.config/quickshell/services/HyprlandData.qml @@ -15,34 +15,56 @@ Singleton { property var windowList: [] property var addresses: [] property var windowByAddress: ({}) + property var workspaces: [] + property var workspaceIds: [] + property var workspaceById: ({}) + property var activeWorkspace: null property var monitors: [] property var layers: ({}) function updateWindowList() { - getClients.running = true - getMonitors.running = true + getClients.running = true; } function updateLayers() { - getLayers.running = true + getLayers.running = true; + } + + function updateMonitors() { + getMonitors.running = true; + } + + function updateWorkspaces() { + getWorkspaces.running = true; + getActiveWorkspace.running = true; + } + + function updateAll() { + updateWindowList(); + updateMonitors(); + updateLayers(); + updateWorkspaces(); + } + + function biggestWindowForWorkspace(workspaceId) { + const windowsInThisWorkspace = HyprlandData.windowList.filter(w => w.workspace.id == workspaceId); + return windowsInThisWorkspace.reduce((maxWin, win) => { + const maxArea = (maxWin?.size?.[0] ?? 0) * (maxWin?.size?.[1] ?? 0); + const winArea = (win?.size?.[0] ?? 0) * (win?.size?.[1] ?? 0); + return winArea > maxArea ? win : maxWin; + }, null); } Component.onCompleted: { - updateWindowList() - updateLayers() + updateAll(); } Connections { target: Hyprland function onRawEvent(event) { - // Filter out redundant old v1 events for the same thing - if(event.name in [ - "activewindow", "focusedmon", "monitoradded", - "createworkspace", "destroyworkspace", "moveworkspace", - "activespecial", "movewindow", "windowtitle" - ]) return ; - updateWindowList() + // console.log("Hyprland raw event:", event.name); + updateAll() } } @@ -50,15 +72,15 @@ Singleton { id: getClients command: ["bash", "-c", "hyprctl clients -j | jq -c"] stdout: SplitParser { - onRead: (data) => { - root.windowList = JSON.parse(data) - let tempWinByAddress = {} + onRead: data => { + root.windowList = JSON.parse(data); + let tempWinByAddress = {}; for (var i = 0; i < root.windowList.length; ++i) { - var win = root.windowList[i] - tempWinByAddress[win.address] = win + var win = root.windowList[i]; + tempWinByAddress[win.address] = win; } - root.windowByAddress = tempWinByAddress - root.addresses = root.windowList.map((win) => win.address) + root.windowByAddress = tempWinByAddress; + root.addresses = root.windowList.map(win => win.address); } } } @@ -67,8 +89,8 @@ Singleton { id: getMonitors command: ["bash", "-c", "hyprctl monitors -j | jq -c"] stdout: SplitParser { - onRead: (data) => { - root.monitors = JSON.parse(data) + onRead: data => { + root.monitors = JSON.parse(data); } } } @@ -77,10 +99,36 @@ Singleton { id: getLayers command: ["bash", "-c", "hyprctl layers -j | jq -c"] stdout: SplitParser { - onRead: (data) => { - root.layers = JSON.parse(data) + onRead: data => { + root.layers = JSON.parse(data); + } + } + } + + Process { + id: getWorkspaces + command: ["bash", "-c", "hyprctl workspaces -j | jq -c"] + stdout: SplitParser { + onRead: data => { + root.workspaces = JSON.parse(data); + let tempWorkspaceById = {}; + for (var i = 0; i < root.workspaces.length; ++i) { + var ws = root.workspaces[i]; + tempWorkspaceById[ws.id] = ws; + } + root.workspaceById = tempWorkspaceById; + root.workspaceIds = root.workspaces.map(ws => ws.id); + } + } + } + + Process { + id: getActiveWorkspace + command: ["bash", "-c", "hyprctl activeworkspace -j | jq -c"] + stdout: SplitParser { + onRead: data => { + root.activeWorkspace = JSON.parse(data); } } } } - From d2eefd5768e5f0d06bfb818e998fa10869a2396d Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 10 Jul 2025 15:15:32 +0700 Subject: [PATCH 077/104] hyprland: no annoying overlapping dolphin copy dialog --- .config/hypr/hyprland/rules.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.config/hypr/hyprland/rules.conf b/.config/hypr/hyprland/rules.conf index 0e324f5da..ffa3663f4 100644 --- a/.config/hypr/hyprland/rules.conf +++ b/.config/hypr/hyprland/rules.conf @@ -28,11 +28,13 @@ windowrulev2 = float, title:.*Welcome windowrulev2 = float, title:^(illogical-impulse Settings)$ windowrulev2 = float, class:org.freedesktop.impl.portal.desktop.kde -# No appearance +# Move # kde-material-you-colors spawns a window when changing dark/light theme. This is to make sure it doesn't interfere at all. windowrulev2 = float, class:^(plasma-changeicons)$ windowrulev2 = noinitialfocus, class:^(plasma-changeicons)$ windowrulev2 = move 999999 999999, class:^(plasma-changeicons)$ +# stupid dolphin copy +windowrulev2 = move 40 80, title:^(Copying — Dolphin)$ # Tiling windowrulev2 = tile, class:^dev\.warp\.Warp$ From 33f2f960b9d1668cc54dabc3c36b6d7cf3c06192 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 10 Jul 2025 16:26:17 +0700 Subject: [PATCH 078/104] quickshell: temporarily disable hyprland layer masking (#1479) --- .../backgroundWidgets/BackgroundWidgets.qml | 6 ++-- .../quickshell/modules/overview/Overview.qml | 6 ++-- .../modules/screenCorners/ScreenCorners.qml | 28 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.config/quickshell/modules/backgroundWidgets/BackgroundWidgets.qml b/.config/quickshell/modules/backgroundWidgets/BackgroundWidgets.qml index 4197e4959..35f30534e 100644 --- a/.config/quickshell/modules/backgroundWidgets/BackgroundWidgets.qml +++ b/.config/quickshell/modules/backgroundWidgets/BackgroundWidgets.qml @@ -80,9 +80,9 @@ Scope { right: true } color: "transparent" - HyprlandWindow.visibleMask: Region { - item: widgetBackground - } + // HyprlandWindow.visibleMask: Region { // Buggy with scaled monitors + // item: widgetBackground + // } Rectangle { id: widgetBackground diff --git a/.config/quickshell/modules/overview/Overview.qml b/.config/quickshell/modules/overview/Overview.qml index 0bc3c6c0f..952e5d29a 100644 --- a/.config/quickshell/modules/overview/Overview.qml +++ b/.config/quickshell/modules/overview/Overview.qml @@ -33,9 +33,9 @@ Scope { mask: Region { item: GlobalStates.overviewOpen ? columnLayout : null } - HyprlandWindow.visibleMask: Region { - item: GlobalStates.overviewOpen ? columnLayout : null - } + // HyprlandWindow.visibleMask: Region { // Buggy with scaled monitors + // item: GlobalStates.overviewOpen ? columnLayout : null + // } anchors { diff --git a/.config/quickshell/modules/screenCorners/ScreenCorners.qml b/.config/quickshell/modules/screenCorners/ScreenCorners.qml index de2130027..0946c03d1 100644 --- a/.config/quickshell/modules/screenCorners/ScreenCorners.qml +++ b/.config/quickshell/modules/screenCorners/ScreenCorners.qml @@ -26,20 +26,20 @@ Scope { mask: Region { item: null } - HyprlandWindow.visibleMask: Region { - Region { - item: topLeftCorner - } - Region { - item: topRightCorner - } - Region { - item: bottomLeftCorner - } - Region { - item: bottomRightCorner - } - } + // HyprlandWindow.visibleMask: Region { + // Region { + // item: topLeftCorner + // } + // Region { + // item: topRightCorner + // } + // Region { + // item: bottomLeftCorner + // } + // Region { + // item: bottomRightCorner + // } + // } WlrLayershell.namespace: "quickshell:screenCorners" WlrLayershell.layer: WlrLayer.Overlay color: "transparent" From 5ee46cfc30f6b4a690bfada77d40b09cd1517c96 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 10 Jul 2025 20:08:47 +0700 Subject: [PATCH 079/104] overview: make icon sizes more acceptable (#1479) --- .config/quickshell/modules/overview/OverviewWidget.qml | 4 ++-- .config/quickshell/modules/overview/OverviewWindow.qml | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.config/quickshell/modules/overview/OverviewWidget.qml b/.config/quickshell/modules/overview/OverviewWidget.qml index b1602774c..18e60c2f9 100644 --- a/.config/quickshell/modules/overview/OverviewWidget.qml +++ b/.config/quickshell/modules/overview/OverviewWidget.qml @@ -19,7 +19,7 @@ Item { readonly property var toplevels: ToplevelManager.toplevels readonly property int workspacesShown: Config.options.overview.rows * Config.options.overview.columns readonly property int workspaceGroup: Math.floor((monitor.activeWorkspace?.id - 1) / workspacesShown) - property bool monitorIsFocused: (Hyprland.focusedMonitor?.id == monitor.id) + property bool monitorIsFocused: (Hyprland.focusedMonitor?.name == monitor.name) property var windows: HyprlandData.windowList property var windowByAddress: HyprlandData.windowByAddress property var windowAddresses: HyprlandData.addresses @@ -163,7 +163,7 @@ Item { property var address: `0x${modelData.HyprlandToplevel.address}` windowData: windowByAddress[address] toplevel: modelData - monitorData: root.monitorData + monitorData: HyprlandData.monitors[monitorId] scale: root.scale availableWorkspaceWidth: root.workspaceImplicitWidth availableWorkspaceHeight: root.workspaceImplicitHeight diff --git a/.config/quickshell/modules/overview/OverviewWindow.qml b/.config/quickshell/modules/overview/OverviewWindow.qml index 56e1d1067..bf023a09d 100644 --- a/.config/quickshell/modules/overview/OverviewWindow.qml +++ b/.config/quickshell/modules/overview/OverviewWindow.qml @@ -91,7 +91,14 @@ Item { // Window Image { id: windowIcon - property var iconSize: Math.min(targetWindowWidth, targetWindowHeight) * (root.compactMode ? root.iconToWindowRatioCompact : root.iconToWindowRatio) + property var iconSize: { + // console.log("-=-=-", root.toplevel.title, "-=-=-") + // console.log("Target window size:", targetWindowWidth, targetWindowHeight) + // console.log("Icon ratio:", root.compactMode ? root.iconToWindowRatioCompact : root.iconToWindowRatio) + // console.log("Scale:", root.monitorData.scale) + // console.log("Final:", Math.min(targetWindowWidth, targetWindowHeight) * (root.compactMode ? root.iconToWindowRatioCompact : root.iconToWindowRatio) / root.monitorData.scale) + return Math.min(targetWindowWidth, targetWindowHeight) * (root.compactMode ? root.iconToWindowRatioCompact : root.iconToWindowRatio) / root.monitorData.scale; + } // mipmap: true Layout.alignment: Qt.AlignHCenter source: root.iconPath From c69eaf7777ad59884b94fc3a0dcfe42cbb11af64 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:03:01 +0700 Subject: [PATCH 080/104] move quickshell config to subfolder to ease distribution https://quickshell.outfoxxed.me/docs/guide/distribution/ --- .config/hypr/hyprland.conf | 1 + .config/hypr/hyprland/keybinds.conf | 30 +++++++++--------- .config/quickshell/{ => ii}/.qmlformat.ini | 0 .config/quickshell/{ => ii}/GlobalStates.qml | 0 .config/quickshell/{ => ii}/ReloadPopup.qml | 0 .../assets/icons/ai-openai-symbolic.svg | 0 .../{ => ii}/assets/icons/arch-symbolic.svg | 0 .../assets/icons/cachyos-symbolic.svg | 0 .../assets/icons/cloudflare-dns-symbolic.svg | 0 .../assets/icons/crosshair-symbolic.svg | 0 .../{ => ii}/assets/icons/debian-symbolic.svg | 0 .../assets/icons/deepseek-symbolic.svg | 0 .../assets/icons/desktop-symbolic.svg | 0 .../assets/icons/endeavouros-symbolic.svg | 0 .../{ => ii}/assets/icons/fedora-symbolic.svg | 0 .../assets/icons/flatpak-symbolic.svg | 0 .../{ => ii}/assets/icons/github-symbolic.svg | 0 .../assets/icons/google-gemini-symbolic.svg | 0 .../{ => ii}/assets/icons/linux-symbolic.svg | 0 .../assets/icons/microsoft-symbolic.svg | 0 .../{ => ii}/assets/icons/nixos-symbolic.svg | 0 .../{ => ii}/assets/icons/ollama-symbolic.svg | 0 .../{ => ii}/assets/icons/openai-symbolic.svg | 0 .../assets/icons/openrouter-symbolic.svg | 0 .../{ => ii}/assets/icons/spark-symbolic.svg | 0 .../{ => ii}/assets/icons/ubuntu-symbolic.svg | 0 .../assets/images/default_wallpaper.png | Bin .../{ => ii}/defaults/ai/prompts/NoPrompt.md | 0 .../defaults/ai/prompts/ii-Default.md | 0 .../{ => ii}/defaults/ai/prompts/ii-Imouto.md | 0 .../ai/prompts/w-FourPointedSparkle.md | 0 .../ai/prompts/w-OpenMechanicalFlower.md | 0 .../backgroundWidgets/BackgroundWidgets.qml | 0 .../{ => ii}/modules/bar/ActiveWindow.qml | 0 .../quickshell/{ => ii}/modules/bar/Bar.qml | 0 .../{ => ii}/modules/bar/BarGroup.qml | 0 .../{ => ii}/modules/bar/BatteryIndicator.qml | 0 .../{ => ii}/modules/bar/CircleUtilButton.qml | 0 .../{ => ii}/modules/bar/ClockWidget.qml | 0 .../quickshell/{ => ii}/modules/bar/Media.qml | 0 .../{ => ii}/modules/bar/Resource.qml | 0 .../{ => ii}/modules/bar/Resources.qml | 0 .../{ => ii}/modules/bar/ScrollHint.qml | 0 .../{ => ii}/modules/bar/SysTray.qml | 0 .../{ => ii}/modules/bar/SysTrayItem.qml | 0 .../{ => ii}/modules/bar/UtilButtons.qml | 0 .../{ => ii}/modules/bar/Workspaces.qml | 0 .../modules/bar/weather/WeatherBar.qml | 0 .../modules/bar/weather/WeatherCard.qml | 0 .../modules/bar/weather/WeatherIcons.qml | 0 .../modules/bar/weather/WeatherPopup.qml | 0 .../modules/cheatsheet/Cheatsheet.qml | 0 .../modules/cheatsheet/CheatsheetKeybinds.qml | 0 .../cheatsheet/CheatsheetPeriodicTable.qml | 0 .../modules/cheatsheet/ElementTile.qml | 0 .../modules/cheatsheet/periodic_table.js | 0 .../{ => ii}/modules/common/Appearance.qml | 0 .../{ => ii}/modules/common/Config.qml | 0 .../{ => ii}/modules/common/Directories.qml | 6 ++-- .../{ => ii}/modules/common/Persistent.qml | 0 .../modules/common/PersistentStates.qml | 0 .../modules/common/functions/color_utils.js | 0 .../modules/common/functions/file_utils.js | 0 .../modules/common/functions/fuzzysort.js | 0 .../modules/common/functions/levendist.js | 0 .../modules/common/functions/object_utils.js | 0 .../modules/common/functions/string_utils.js | 0 .../modules/common/widgets/ButtonGroup.qml | 0 .../common/widgets/CircularProgress.qml | 0 .../modules/common/widgets/CliphistImage.qml | 0 .../modules/common/widgets/ConfigRow.qml | 0 .../common/widgets/ConfigSelectionArray.qml | 0 .../modules/common/widgets/ConfigSpinBox.qml | 0 .../modules/common/widgets/ConfigSwitch.qml | 0 .../modules/common/widgets/ContentPage.qml | 0 .../modules/common/widgets/ContentSection.qml | 0 .../common/widgets/ContentSubsection.qml | 0 .../common/widgets/ContentSubsectionLabel.qml | 0 .../modules/common/widgets/CustomIcon.qml | 0 .../modules/common/widgets/DialogButton.qml | 0 .../modules/common/widgets/DragManager.qml | 0 .../modules/common/widgets/Favicon.qml | 0 .../common/widgets/FloatingActionButton.qml | 0 .../common/widgets/FlowButtonGroup.qml | 0 .../modules/common/widgets/GroupButton.qml | 0 .../modules/common/widgets/KeyboardKey.qml | 0 .../widgets/LightDarkPreferenceButton.qml | 0 .../modules/common/widgets/MaterialSymbol.qml | 0 .../common/widgets/MaterialTextField.qml | 0 .../modules/common/widgets/MenuButton.qml | 0 .../modules/common/widgets/NavigationRail.qml | 0 .../common/widgets/NavigationRailButton.qml | 0 .../widgets/NavigationRailExpandButton.qml | 0 .../common/widgets/NavigationRailTabArray.qml | 0 .../widgets/NotificationActionButton.qml | 0 .../common/widgets/NotificationAppIcon.qml | 0 .../common/widgets/NotificationGroup.qml | 0 .../widgets/NotificationGroupExpandButton.qml | 0 .../common/widgets/NotificationItem.qml | 0 .../common/widgets/NotificationListView.qml | 0 .../widgets/PointingHandInteraction.qml | 0 .../common/widgets/PointingHandLinkHover.qml | 0 .../modules/common/widgets/PrimaryTabBar.qml | 0 .../common/widgets/PrimaryTabButton.qml | 0 .../modules/common/widgets/Revealer.qml | 0 .../modules/common/widgets/RippleButton.qml | 0 .../common/widgets/RippleButtonWithIcon.qml | 0 .../modules/common/widgets/RoundCorner.qml | 0 .../common/widgets/SecondaryTabButton.qml | 0 .../common/widgets/SelectionDialog.qml | 0 .../common/widgets/SelectionGroupButton.qml | 0 .../modules/common/widgets/StyledLabel.qml | 0 .../modules/common/widgets/StyledListView.qml | 0 .../common/widgets/StyledProgressBar.qml | 0 .../common/widgets/StyledRadioButton.qml | 0 .../widgets/StyledRectangularShadow.qml | 0 .../modules/common/widgets/StyledSlider.qml | 0 .../modules/common/widgets/StyledSpinBox.qml | 0 .../modules/common/widgets/StyledSwitch.qml | 0 .../modules/common/widgets/StyledText.qml | 0 .../modules/common/widgets/StyledTextArea.qml | 0 .../common/widgets/StyledTextInput.qml | 0 .../modules/common/widgets/StyledToolTip.qml | 0 .../common/widgets/VerticalButtonGroup.qml | 0 .../modules/common/widgets/WaveVisualizer.qml | 0 .../common/widgets/notification_utils.js | 0 .../quickshell/{ => ii}/modules/dock/Dock.qml | 0 .../{ => ii}/modules/dock/DockAppButton.qml | 0 .../{ => ii}/modules/dock/DockApps.qml | 0 .../{ => ii}/modules/dock/DockButton.qml | 0 .../{ => ii}/modules/dock/DockSeparator.qml | 0 .../modules/mediaControls/MediaControls.qml | 2 +- .../modules/mediaControls/PlayerControl.qml | 0 .../notificationPopup/NotificationPopup.qml | 0 .../OnScreenDisplayBrightness.qml | 0 .../onScreenDisplay/OnScreenDisplayVolume.qml | 0 .../onScreenDisplay/OsdValueIndicator.qml | 0 .../onScreenKeyboard/OnScreenKeyboard.qml | 0 .../modules/onScreenKeyboard/OskContent.qml | 0 .../modules/onScreenKeyboard/OskKey.qml | 0 .../modules/onScreenKeyboard/layouts.js | 0 .../{ => ii}/modules/overview/Overview.qml | 0 .../modules/overview/OverviewWidget.qml | 0 .../modules/overview/OverviewWindow.qml | 0 .../{ => ii}/modules/overview/SearchItem.qml | 0 .../modules/overview/SearchWidget.qml | 0 .../modules/screenCorners/ScreenCorners.qml | 0 .../{ => ii}/modules/session/Session.qml | 0 .../modules/session/SessionActionButton.qml | 0 .../{ => ii}/modules/settings/About.qml | 0 .../modules/settings/InterfaceConfig.qml | 0 .../modules/settings/ServicesConfig.qml | 0 .../{ => ii}/modules/settings/StyleConfig.qml | 2 +- .../{ => ii}/modules/sidebarLeft/AiChat.qml | 2 +- .../{ => ii}/modules/sidebarLeft/Anime.qml | 0 .../modules/sidebarLeft/ApiCommandButton.qml | 0 .../modules/sidebarLeft/DescriptionBox.qml | 0 .../modules/sidebarLeft/SidebarLeft.qml | 0 .../sidebarLeft/SidebarLeftContent.qml | 0 .../modules/sidebarLeft/Translator.qml | 0 .../modules/sidebarLeft/aiChat/AiMessage.qml | 0 .../aiChat/AiMessageControlButton.qml | 0 .../aiChat/AnnotationSourceButton.qml | 0 .../sidebarLeft/aiChat/MessageCodeBlock.qml | 0 .../sidebarLeft/aiChat/MessageTextBlock.qml | 0 .../sidebarLeft/aiChat/MessageThinkBlock.qml | 0 .../modules/sidebarLeft/anime/BooruImage.qml | 0 .../sidebarLeft/anime/BooruResponse.qml | 0 .../translator/LanguageSelectorButton.qml | 0 .../sidebarLeft/translator/TextCanvas.qml | 0 .../sidebarRight/BottomWidgetGroup.qml | 0 .../sidebarRight/CenterWidgetGroup.qml | 0 .../modules/sidebarRight/SidebarRight.qml | 2 +- .../calendar/CalendarDayButton.qml | 0 .../calendar/CalendarHeaderButton.qml | 0 .../sidebarRight/calendar/CalendarWidget.qml | 0 .../sidebarRight/calendar/calendar_layout.js | 0 .../notifications/NotificationList.qml | 0 .../NotificationStatusButton.qml | 0 .../quickToggles/BluetoothToggle.qml | 0 .../quickToggles/CloudflareWarp.qml | 0 .../sidebarRight/quickToggles/GameMode.qml | 0 .../quickToggles/IdleInhibitor.qml | 4 +-- .../quickToggles/NetworkToggle.qml | 0 .../sidebarRight/quickToggles/NightLight.qml | 0 .../quickToggles/QuickToggleButton.qml | 0 .../modules/sidebarRight/todo/TaskList.qml | 0 .../todo/TodoItemActionButton.qml | 0 .../modules/sidebarRight/todo/TodoWidget.qml | 0 .../volumeMixer/AudioDeviceSelectorButton.qml | 0 .../sidebarRight/volumeMixer/VolumeMixer.qml | 0 .../volumeMixer/VolumeMixerEntry.qml | 0 .config/quickshell/{ => ii}/screenshot.qml | 2 +- .../ai/show-installed-ollama-models.sh | 0 .../scripts/cava/raw_output_config.txt | 0 .../{ => ii}/scripts/colors/applycolor.sh | 7 ++-- .../colors/generate_colors_material.py | 0 .../ii/scripts/colors/random_konachan_wall.sh | 19 +++++++++++ .../scripts/colors/scheme_for_image.py | 0 .../{ => ii}/scripts/colors/switchwall.sh | 9 +++--- .../{ => ii}/scripts/hyprland/get_keybinds.py | 0 .../{ => ii}/scripts/images/find_regions.py | 0 .../{ => ii}/scripts/kvantum/adwsvg.py | 0 .../{ => ii}/scripts/kvantum/adwsvgDark.py | 0 .../scripts/kvantum/changeAdwColors.py | 0 .../{ => ii}/scripts/kvantum/materialQT.sh | 8 +++-- .../scripts/terminal/scheme-base.json | 0 .../{ => ii}/scripts/terminal/sequences.txt | 0 .../scripts/wayland-idle-inhibitor.py | 0 .config/quickshell/{ => ii}/services/Ai.qml | 2 +- .../{ => ii}/services/AiMessageData.qml | 0 .../{ => ii}/services/AppSearch.qml | 0 .../quickshell/{ => ii}/services/Audio.qml | 0 .../quickshell/{ => ii}/services/Battery.qml | 0 .../{ => ii}/services/Bluetooth.qml | 0 .../quickshell/{ => ii}/services/Booru.qml | 0 .../{ => ii}/services/BooruResponseData.qml | 0 .../{ => ii}/services/Brightness.qml | 0 .../quickshell/{ => ii}/services/Cliphist.qml | 0 .../quickshell/{ => ii}/services/DateTime.qml | 0 .../quickshell/{ => ii}/services/Emojis.qml | 0 .../{ => ii}/services/FirstRunExperience.qml | 4 +-- .../{ => ii}/services/HyprlandData.qml | 0 .../{ => ii}/services/HyprlandKeybinds.qml | 2 +- .../{ => ii}/services/KeyringStorage.qml | 0 .../{ => ii}/services/LatexRenderer.qml | 0 .../{ => ii}/services/MaterialThemeLoader.qml | 0 .../{ => ii}/services/MprisController.qml | 0 .../quickshell/{ => ii}/services/Network.qml | 0 .../{ => ii}/services/Notifications.qml | 0 .../{ => ii}/services/ResourceUsage.qml | 0 .../{ => ii}/services/SystemInfo.qml | 0 .config/quickshell/{ => ii}/services/Todo.qml | 0 .../quickshell/{ => ii}/services/Weather.qml | 0 .../quickshell/{ => ii}/services/Ydotool.qml | 0 .config/quickshell/{ => ii}/settings.qml | 0 .config/quickshell/{ => ii}/shell.qml | 0 .config/quickshell/{ => ii}/welcome.qml | 2 +- .../scripts/colors/random_konachan_wall.sh | 10 ------ 239 files changed, 65 insertions(+), 49 deletions(-) rename .config/quickshell/{ => ii}/.qmlformat.ini (100%) rename .config/quickshell/{ => ii}/GlobalStates.qml (100%) rename .config/quickshell/{ => ii}/ReloadPopup.qml (100%) rename .config/quickshell/{ => ii}/assets/icons/ai-openai-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/arch-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/cachyos-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/cloudflare-dns-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/crosshair-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/debian-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/deepseek-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/desktop-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/endeavouros-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/fedora-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/flatpak-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/github-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/google-gemini-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/linux-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/microsoft-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/nixos-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/ollama-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/openai-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/openrouter-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/spark-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/icons/ubuntu-symbolic.svg (100%) rename .config/quickshell/{ => ii}/assets/images/default_wallpaper.png (100%) rename .config/quickshell/{ => ii}/defaults/ai/prompts/NoPrompt.md (100%) rename .config/quickshell/{ => ii}/defaults/ai/prompts/ii-Default.md (100%) rename .config/quickshell/{ => ii}/defaults/ai/prompts/ii-Imouto.md (100%) rename .config/quickshell/{ => ii}/defaults/ai/prompts/w-FourPointedSparkle.md (100%) rename .config/quickshell/{ => ii}/defaults/ai/prompts/w-OpenMechanicalFlower.md (100%) rename .config/quickshell/{ => ii}/modules/backgroundWidgets/BackgroundWidgets.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/ActiveWindow.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/Bar.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/BarGroup.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/BatteryIndicator.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/CircleUtilButton.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/ClockWidget.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/Media.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/Resource.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/Resources.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/ScrollHint.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/SysTray.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/SysTrayItem.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/UtilButtons.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/Workspaces.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/weather/WeatherBar.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/weather/WeatherCard.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/weather/WeatherIcons.qml (100%) rename .config/quickshell/{ => ii}/modules/bar/weather/WeatherPopup.qml (100%) rename .config/quickshell/{ => ii}/modules/cheatsheet/Cheatsheet.qml (100%) rename .config/quickshell/{ => ii}/modules/cheatsheet/CheatsheetKeybinds.qml (100%) rename .config/quickshell/{ => ii}/modules/cheatsheet/CheatsheetPeriodicTable.qml (100%) rename .config/quickshell/{ => ii}/modules/cheatsheet/ElementTile.qml (100%) rename .config/quickshell/{ => ii}/modules/cheatsheet/periodic_table.js (100%) rename .config/quickshell/{ => ii}/modules/common/Appearance.qml (100%) rename .config/quickshell/{ => ii}/modules/common/Config.qml (100%) rename .config/quickshell/{ => ii}/modules/common/Directories.qml (91%) rename .config/quickshell/{ => ii}/modules/common/Persistent.qml (100%) rename .config/quickshell/{ => ii}/modules/common/PersistentStates.qml (100%) rename .config/quickshell/{ => ii}/modules/common/functions/color_utils.js (100%) rename .config/quickshell/{ => ii}/modules/common/functions/file_utils.js (100%) rename .config/quickshell/{ => ii}/modules/common/functions/fuzzysort.js (100%) rename .config/quickshell/{ => ii}/modules/common/functions/levendist.js (100%) rename .config/quickshell/{ => ii}/modules/common/functions/object_utils.js (100%) rename .config/quickshell/{ => ii}/modules/common/functions/string_utils.js (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ButtonGroup.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/CircularProgress.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/CliphistImage.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ConfigRow.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ConfigSelectionArray.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ConfigSpinBox.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ConfigSwitch.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ContentPage.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ContentSection.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ContentSubsection.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/ContentSubsectionLabel.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/CustomIcon.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/DialogButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/DragManager.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/Favicon.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/FloatingActionButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/FlowButtonGroup.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/GroupButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/KeyboardKey.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/LightDarkPreferenceButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/MaterialSymbol.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/MaterialTextField.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/MenuButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NavigationRail.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NavigationRailButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NavigationRailExpandButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NavigationRailTabArray.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NotificationActionButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NotificationAppIcon.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NotificationGroup.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NotificationGroupExpandButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NotificationItem.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/NotificationListView.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/PointingHandInteraction.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/PointingHandLinkHover.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/PrimaryTabBar.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/PrimaryTabButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/Revealer.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/RippleButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/RippleButtonWithIcon.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/RoundCorner.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/SecondaryTabButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/SelectionDialog.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/SelectionGroupButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledLabel.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledListView.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledProgressBar.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledRadioButton.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledRectangularShadow.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledSlider.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledSpinBox.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledSwitch.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledText.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledTextArea.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledTextInput.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/StyledToolTip.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/VerticalButtonGroup.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/WaveVisualizer.qml (100%) rename .config/quickshell/{ => ii}/modules/common/widgets/notification_utils.js (100%) rename .config/quickshell/{ => ii}/modules/dock/Dock.qml (100%) rename .config/quickshell/{ => ii}/modules/dock/DockAppButton.qml (100%) rename .config/quickshell/{ => ii}/modules/dock/DockApps.qml (100%) rename .config/quickshell/{ => ii}/modules/dock/DockButton.qml (100%) rename .config/quickshell/{ => ii}/modules/dock/DockSeparator.qml (100%) rename .config/quickshell/{ => ii}/modules/mediaControls/MediaControls.qml (99%) rename .config/quickshell/{ => ii}/modules/mediaControls/PlayerControl.qml (100%) rename .config/quickshell/{ => ii}/modules/notificationPopup/NotificationPopup.qml (100%) rename .config/quickshell/{ => ii}/modules/onScreenDisplay/OnScreenDisplayBrightness.qml (100%) rename .config/quickshell/{ => ii}/modules/onScreenDisplay/OnScreenDisplayVolume.qml (100%) rename .config/quickshell/{ => ii}/modules/onScreenDisplay/OsdValueIndicator.qml (100%) rename .config/quickshell/{ => ii}/modules/onScreenKeyboard/OnScreenKeyboard.qml (100%) rename .config/quickshell/{ => ii}/modules/onScreenKeyboard/OskContent.qml (100%) rename .config/quickshell/{ => ii}/modules/onScreenKeyboard/OskKey.qml (100%) rename .config/quickshell/{ => ii}/modules/onScreenKeyboard/layouts.js (100%) rename .config/quickshell/{ => ii}/modules/overview/Overview.qml (100%) rename .config/quickshell/{ => ii}/modules/overview/OverviewWidget.qml (100%) rename .config/quickshell/{ => ii}/modules/overview/OverviewWindow.qml (100%) rename .config/quickshell/{ => ii}/modules/overview/SearchItem.qml (100%) rename .config/quickshell/{ => ii}/modules/overview/SearchWidget.qml (100%) rename .config/quickshell/{ => ii}/modules/screenCorners/ScreenCorners.qml (100%) rename .config/quickshell/{ => ii}/modules/session/Session.qml (100%) rename .config/quickshell/{ => ii}/modules/session/SessionActionButton.qml (100%) rename .config/quickshell/{ => ii}/modules/settings/About.qml (100%) rename .config/quickshell/{ => ii}/modules/settings/InterfaceConfig.qml (100%) rename .config/quickshell/{ => ii}/modules/settings/ServicesConfig.qml (100%) rename .config/quickshell/{ => ii}/modules/settings/StyleConfig.qml (99%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/AiChat.qml (99%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/Anime.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/ApiCommandButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/DescriptionBox.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/SidebarLeft.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/SidebarLeftContent.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/Translator.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/aiChat/AiMessage.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/aiChat/AiMessageControlButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/aiChat/MessageCodeBlock.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/aiChat/MessageTextBlock.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/aiChat/MessageThinkBlock.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/anime/BooruImage.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/anime/BooruResponse.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/translator/LanguageSelectorButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarLeft/translator/TextCanvas.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/BottomWidgetGroup.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/CenterWidgetGroup.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/SidebarRight.qml (98%) rename .config/quickshell/{ => ii}/modules/sidebarRight/calendar/CalendarDayButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/calendar/CalendarHeaderButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/calendar/CalendarWidget.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/calendar/calendar_layout.js (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/notifications/NotificationList.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/notifications/NotificationStatusButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/quickToggles/BluetoothToggle.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/quickToggles/CloudflareWarp.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/quickToggles/GameMode.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/quickToggles/IdleInhibitor.qml (75%) rename .config/quickshell/{ => ii}/modules/sidebarRight/quickToggles/NetworkToggle.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/quickToggles/NightLight.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/quickToggles/QuickToggleButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/todo/TaskList.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/todo/TodoItemActionButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/todo/TodoWidget.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/volumeMixer/AudioDeviceSelectorButton.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/volumeMixer/VolumeMixer.qml (100%) rename .config/quickshell/{ => ii}/modules/sidebarRight/volumeMixer/VolumeMixerEntry.qml (100%) rename .config/quickshell/{ => ii}/screenshot.qml (99%) rename .config/quickshell/{ => ii}/scripts/ai/show-installed-ollama-models.sh (100%) rename .config/quickshell/{ => ii}/scripts/cava/raw_output_config.txt (100%) rename .config/quickshell/{ => ii}/scripts/colors/applycolor.sh (89%) rename .config/quickshell/{ => ii}/scripts/colors/generate_colors_material.py (100%) create mode 100755 .config/quickshell/ii/scripts/colors/random_konachan_wall.sh rename .config/quickshell/{ => ii}/scripts/colors/scheme_for_image.py (100%) rename .config/quickshell/{ => ii}/scripts/colors/switchwall.sh (98%) rename .config/quickshell/{ => ii}/scripts/hyprland/get_keybinds.py (100%) rename .config/quickshell/{ => ii}/scripts/images/find_regions.py (100%) rename .config/quickshell/{ => ii}/scripts/kvantum/adwsvg.py (100%) rename .config/quickshell/{ => ii}/scripts/kvantum/adwsvgDark.py (100%) rename .config/quickshell/{ => ii}/scripts/kvantum/changeAdwColors.py (100%) rename .config/quickshell/{ => ii}/scripts/kvantum/materialQT.sh (80%) rename .config/quickshell/{ => ii}/scripts/terminal/scheme-base.json (100%) rename .config/quickshell/{ => ii}/scripts/terminal/sequences.txt (100%) rename .config/quickshell/{ => ii}/scripts/wayland-idle-inhibitor.py (100%) rename .config/quickshell/{ => ii}/services/Ai.qml (99%) rename .config/quickshell/{ => ii}/services/AiMessageData.qml (100%) rename .config/quickshell/{ => ii}/services/AppSearch.qml (100%) rename .config/quickshell/{ => ii}/services/Audio.qml (100%) rename .config/quickshell/{ => ii}/services/Battery.qml (100%) rename .config/quickshell/{ => ii}/services/Bluetooth.qml (100%) rename .config/quickshell/{ => ii}/services/Booru.qml (100%) rename .config/quickshell/{ => ii}/services/BooruResponseData.qml (100%) rename .config/quickshell/{ => ii}/services/Brightness.qml (100%) rename .config/quickshell/{ => ii}/services/Cliphist.qml (100%) rename .config/quickshell/{ => ii}/services/DateTime.qml (100%) rename .config/quickshell/{ => ii}/services/Emojis.qml (100%) rename .config/quickshell/{ => ii}/services/FirstRunExperience.qml (88%) rename .config/quickshell/{ => ii}/services/HyprlandData.qml (100%) rename .config/quickshell/{ => ii}/services/HyprlandKeybinds.qml (96%) rename .config/quickshell/{ => ii}/services/KeyringStorage.qml (100%) rename .config/quickshell/{ => ii}/services/LatexRenderer.qml (100%) rename .config/quickshell/{ => ii}/services/MaterialThemeLoader.qml (100%) rename .config/quickshell/{ => ii}/services/MprisController.qml (100%) rename .config/quickshell/{ => ii}/services/Network.qml (100%) rename .config/quickshell/{ => ii}/services/Notifications.qml (100%) rename .config/quickshell/{ => ii}/services/ResourceUsage.qml (100%) rename .config/quickshell/{ => ii}/services/SystemInfo.qml (100%) rename .config/quickshell/{ => ii}/services/Todo.qml (100%) rename .config/quickshell/{ => ii}/services/Weather.qml (100%) rename .config/quickshell/{ => ii}/services/Ydotool.qml (100%) rename .config/quickshell/{ => ii}/settings.qml (100%) rename .config/quickshell/{ => ii}/shell.qml (100%) rename .config/quickshell/{ => ii}/welcome.qml (99%) delete mode 100755 .config/quickshell/scripts/colors/random_konachan_wall.sh diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index 48648f475..5698f5945 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -1,6 +1,7 @@ # This file sources other files in `hyprland` and `custom` folders # You wanna add your stuff in files in `custom` +$qsConfig = ii exec = hyprctl dispatch submap global # DO NOT REMOVE THIS OR YOU WON'T BE ABLE TO USE ANY KEYBIND submap = global # This is required for catchall to work diff --git a/.config/hypr/hyprland/keybinds.conf b/.config/hypr/hyprland/keybinds.conf index a07d4255c..0552c1b46 100644 --- a/.config/hypr/hyprland/keybinds.conf +++ b/.config/hypr/hyprland/keybinds.conf @@ -5,7 +5,7 @@ ##! Shell # These absolutely need to be on top, or they won't work consistently bindid = Super, Super_L, Toggle overview, global, quickshell:overviewToggleRelease # Toggle overview/launcher -bind = Super, Super_L, exec, qs ipc call TEST_ALIVE || pkill fuzzel || fuzzel # [hidden] Launcher (fallback) +bind = Super, Super_L, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill fuzzel || fuzzel # [hidden] Launcher (fallback) binditn = Super, catchall, global, quickshell:overviewToggleReleaseInterrupt # [hidden] bind = Ctrl, Super_L, global, quickshell:overviewToggleReleaseInterrupt # [hidden] bind = Super, mouse:272, global, quickshell:overviewToggleReleaseInterrupt # [hidden] @@ -30,11 +30,11 @@ bindd = Super, Slash, Toggle cheatsheet, global, quickshell:cheatsheetToggle # T bindd = Super, K, Toggle on-screen keyboard, global, quickshell:oskToggle # Toggle on-screen keyboard bindd = Super, M, Toggle media controls, global, quickshell:mediaControlsToggle # Toggle media controls bindd = Ctrl+Alt, Delete, Toggle session menu, global, quickshell:sessionToggle # Toggle session menu -bind = Ctrl+Alt, Delete, exec, qs ipc call TEST_ALIVE || pkill wlogout || wlogout -p layer-shell # [hidden] Session menu (fallback) -bind = Shift+Super+Alt, Slash, exec, qs -p ~/.config/quickshell/welcome.qml # [hidden] Launch welcome app +bind = Ctrl+Alt, Delete, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill wlogout || wlogout -p layer-shell # [hidden] Session menu (fallback) +bind = Shift+Super+Alt, Slash, exec, qs -p ~/.config/quickshell/$qsConfig/welcome.qml # [hidden] Launch welcome app -bindle=, XF86MonBrightnessUp, exec, qs ipc call brightness increment || brightnessctl s 5%+ # [hidden] -bindle=, XF86MonBrightnessDown, exec, qs ipc call brightness decrement || brightnessctl s 5%- # [hidden] +bindle=, XF86MonBrightnessUp, exec, qs -c $qsConfig ipc call brightness increment || brightnessctl s 5%+ # [hidden] +bindle=, XF86MonBrightnessDown, exec, qs -c $qsConfig ipc call brightness decrement || brightnessctl s 5%- # [hidden] bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 2%+ # [hidden] bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%- # [hidden] @@ -43,14 +43,14 @@ bindld = Super+Shift,M, Toggle mute, exec, wpctl set-mute @DEFAULT_SINK@ toggle bindl = Alt ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle # [hidden] bindl = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle # [hidden] bindld = Super+Alt,M, Toggle mic, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle # [hidden] -bindd = Ctrl+Super, T, Change wallpaper, exec, ~/.config/quickshell/scripts/colors/switchwall.sh # Change wallpaper -bind = Ctrl+Super, R, exec, killall ags agsv1 gjs ydotool qs quickshell; qs & # Restart widgets +bindd = Ctrl+Super, T, Change wallpaper, exec, ~/.config/quickshell/$qsConfig/scripts/colors/switchwall.sh # Change wallpaper +bind = Ctrl+Super, R, exec, killall ags agsv1 gjs ydotool qs quickshell; qs -c $qsConfig & # Restart widgets ##! Utilities # Screenshot, Record, OCR, Color picker, Clipboard history -bindd = Super, V, Copy clipboard history entry, exec, qs ipc call TEST_ALIVE || pkill fuzzel || cliphist list | fuzzel --match-mode fzf --dmenu | cliphist decode | wl-copy # [hidden] Clipboard history >> clipboard (fallback) -bindd = Super, Period, Copy an emoji, exec, qs ipc call TEST_ALIVE || pkill fuzzel || ~/.config/hypr/hyprland/scripts/fuzzel-emoji.sh copy # [hidden] Emoji >> clipboard (fallback) -bindd = Super+Shift, S, Screen snip, exec, qs -p ~/.config/quickshell/screenshot.qml || pidof slurp || hyprshot --freeze --clipboard-only --mode region --silent # Screen snip +bindd = Super, V, Copy clipboard history entry, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill fuzzel || cliphist list | fuzzel --match-mode fzf --dmenu | cliphist decode | wl-copy # [hidden] Clipboard history >> clipboard (fallback) +bindd = Super, Period, Copy an emoji, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill fuzzel || ~/.config/hypr/hyprland/scripts/fuzzel-emoji.sh copy # [hidden] Emoji >> clipboard (fallback) +bindd = Super+Shift, S, Screen snip, exec, qs -p ~/.config/quickshell/$qsConfig/screenshot.qml || pidof slurp || hyprshot --freeze --clipboard-only --mode region --silent # Screen snip # OCR bindd = Super+Shift, T, Character recognition,exec,grim -g "$(slurp $SLURP_ARGS)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png" # [hidden] # Color picker @@ -183,10 +183,10 @@ bindd = Ctrl+Shift+Alt+Super, Delete, Shutdown, exec, systemctl poweroff || logi ##! Screen # Zoom -binde = Super, Minus, exec, qs ipc call zoom zoomOut # Zoom out -binde = Super, Equal, exec, qs ipc call zoom zoomIn # Zoom in -binde = Super, Minus, exec, qs ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh decrease 0.1 # [hidden] Zoom out -binde = Super, Equal, exec, qs ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh increase 0.1 # [hidden] Zoom in +binde = Super, Minus, exec, qs -c $qsConfig ipc call zoom zoomOut # Zoom out +binde = Super, Equal, exec, qs -c $qsConfig ipc call zoom zoomIn # Zoom in +binde = Super, Minus, exec, qs -c $qsConfig ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh decrease 0.1 # [hidden] Zoom out +binde = Super, Equal, exec, qs -c $qsConfig ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh increase 0.1 # [hidden] Zoom in ##! Media bindl= Super+Shift, N, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` # Next track @@ -209,7 +209,7 @@ bind = Super, C, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh bind = Super+Shift, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "wps" "onlyoffice-desktopeditors" # Office software bind = Super, X, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kate" "gnome-text-editor" "emacs" # Text editor bind = Ctrl+Super, V, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "pavucontrol-qt" "pavucontrol" # Volume mixer -bind = Super, I, exec, XDG_CURRENT_DESKTOP=gnome ~/.config/hypr/hyprland/scripts/launch_first_available.sh "qs -p ~/.config/quickshell/settings.qml" "systemsettings" "gnome-control-center" "better-control" # Settings app +bind = Super, I, exec, XDG_CURRENT_DESKTOP=gnome ~/.config/hypr/hyprland/scripts/launch_first_available.sh "qs -p ~/.config/quickshell/$qsConfig/settings.qml" "systemsettings" "gnome-control-center" "better-control" # Settings app bind = Ctrl+Shift, Escape, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "gnome-system-monitor" "plasma-systemmonitzor --page-name Processes" "command -v btop && kitty -1 fish -c btop" # Task manager # Cursed stuff diff --git a/.config/quickshell/.qmlformat.ini b/.config/quickshell/ii/.qmlformat.ini similarity index 100% rename from .config/quickshell/.qmlformat.ini rename to .config/quickshell/ii/.qmlformat.ini diff --git a/.config/quickshell/GlobalStates.qml b/.config/quickshell/ii/GlobalStates.qml similarity index 100% rename from .config/quickshell/GlobalStates.qml rename to .config/quickshell/ii/GlobalStates.qml diff --git a/.config/quickshell/ReloadPopup.qml b/.config/quickshell/ii/ReloadPopup.qml similarity index 100% rename from .config/quickshell/ReloadPopup.qml rename to .config/quickshell/ii/ReloadPopup.qml diff --git a/.config/quickshell/assets/icons/ai-openai-symbolic.svg b/.config/quickshell/ii/assets/icons/ai-openai-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/ai-openai-symbolic.svg rename to .config/quickshell/ii/assets/icons/ai-openai-symbolic.svg diff --git a/.config/quickshell/assets/icons/arch-symbolic.svg b/.config/quickshell/ii/assets/icons/arch-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/arch-symbolic.svg rename to .config/quickshell/ii/assets/icons/arch-symbolic.svg diff --git a/.config/quickshell/assets/icons/cachyos-symbolic.svg b/.config/quickshell/ii/assets/icons/cachyos-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/cachyos-symbolic.svg rename to .config/quickshell/ii/assets/icons/cachyos-symbolic.svg diff --git a/.config/quickshell/assets/icons/cloudflare-dns-symbolic.svg b/.config/quickshell/ii/assets/icons/cloudflare-dns-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/cloudflare-dns-symbolic.svg rename to .config/quickshell/ii/assets/icons/cloudflare-dns-symbolic.svg diff --git a/.config/quickshell/assets/icons/crosshair-symbolic.svg b/.config/quickshell/ii/assets/icons/crosshair-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/crosshair-symbolic.svg rename to .config/quickshell/ii/assets/icons/crosshair-symbolic.svg diff --git a/.config/quickshell/assets/icons/debian-symbolic.svg b/.config/quickshell/ii/assets/icons/debian-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/debian-symbolic.svg rename to .config/quickshell/ii/assets/icons/debian-symbolic.svg diff --git a/.config/quickshell/assets/icons/deepseek-symbolic.svg b/.config/quickshell/ii/assets/icons/deepseek-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/deepseek-symbolic.svg rename to .config/quickshell/ii/assets/icons/deepseek-symbolic.svg diff --git a/.config/quickshell/assets/icons/desktop-symbolic.svg b/.config/quickshell/ii/assets/icons/desktop-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/desktop-symbolic.svg rename to .config/quickshell/ii/assets/icons/desktop-symbolic.svg diff --git a/.config/quickshell/assets/icons/endeavouros-symbolic.svg b/.config/quickshell/ii/assets/icons/endeavouros-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/endeavouros-symbolic.svg rename to .config/quickshell/ii/assets/icons/endeavouros-symbolic.svg diff --git a/.config/quickshell/assets/icons/fedora-symbolic.svg b/.config/quickshell/ii/assets/icons/fedora-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/fedora-symbolic.svg rename to .config/quickshell/ii/assets/icons/fedora-symbolic.svg diff --git a/.config/quickshell/assets/icons/flatpak-symbolic.svg b/.config/quickshell/ii/assets/icons/flatpak-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/flatpak-symbolic.svg rename to .config/quickshell/ii/assets/icons/flatpak-symbolic.svg diff --git a/.config/quickshell/assets/icons/github-symbolic.svg b/.config/quickshell/ii/assets/icons/github-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/github-symbolic.svg rename to .config/quickshell/ii/assets/icons/github-symbolic.svg diff --git a/.config/quickshell/assets/icons/google-gemini-symbolic.svg b/.config/quickshell/ii/assets/icons/google-gemini-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/google-gemini-symbolic.svg rename to .config/quickshell/ii/assets/icons/google-gemini-symbolic.svg diff --git a/.config/quickshell/assets/icons/linux-symbolic.svg b/.config/quickshell/ii/assets/icons/linux-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/linux-symbolic.svg rename to .config/quickshell/ii/assets/icons/linux-symbolic.svg diff --git a/.config/quickshell/assets/icons/microsoft-symbolic.svg b/.config/quickshell/ii/assets/icons/microsoft-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/microsoft-symbolic.svg rename to .config/quickshell/ii/assets/icons/microsoft-symbolic.svg diff --git a/.config/quickshell/assets/icons/nixos-symbolic.svg b/.config/quickshell/ii/assets/icons/nixos-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/nixos-symbolic.svg rename to .config/quickshell/ii/assets/icons/nixos-symbolic.svg diff --git a/.config/quickshell/assets/icons/ollama-symbolic.svg b/.config/quickshell/ii/assets/icons/ollama-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/ollama-symbolic.svg rename to .config/quickshell/ii/assets/icons/ollama-symbolic.svg diff --git a/.config/quickshell/assets/icons/openai-symbolic.svg b/.config/quickshell/ii/assets/icons/openai-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/openai-symbolic.svg rename to .config/quickshell/ii/assets/icons/openai-symbolic.svg diff --git a/.config/quickshell/assets/icons/openrouter-symbolic.svg b/.config/quickshell/ii/assets/icons/openrouter-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/openrouter-symbolic.svg rename to .config/quickshell/ii/assets/icons/openrouter-symbolic.svg diff --git a/.config/quickshell/assets/icons/spark-symbolic.svg b/.config/quickshell/ii/assets/icons/spark-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/spark-symbolic.svg rename to .config/quickshell/ii/assets/icons/spark-symbolic.svg diff --git a/.config/quickshell/assets/icons/ubuntu-symbolic.svg b/.config/quickshell/ii/assets/icons/ubuntu-symbolic.svg similarity index 100% rename from .config/quickshell/assets/icons/ubuntu-symbolic.svg rename to .config/quickshell/ii/assets/icons/ubuntu-symbolic.svg diff --git a/.config/quickshell/assets/images/default_wallpaper.png b/.config/quickshell/ii/assets/images/default_wallpaper.png similarity index 100% rename from .config/quickshell/assets/images/default_wallpaper.png rename to .config/quickshell/ii/assets/images/default_wallpaper.png diff --git a/.config/quickshell/defaults/ai/prompts/NoPrompt.md b/.config/quickshell/ii/defaults/ai/prompts/NoPrompt.md similarity index 100% rename from .config/quickshell/defaults/ai/prompts/NoPrompt.md rename to .config/quickshell/ii/defaults/ai/prompts/NoPrompt.md diff --git a/.config/quickshell/defaults/ai/prompts/ii-Default.md b/.config/quickshell/ii/defaults/ai/prompts/ii-Default.md similarity index 100% rename from .config/quickshell/defaults/ai/prompts/ii-Default.md rename to .config/quickshell/ii/defaults/ai/prompts/ii-Default.md diff --git a/.config/quickshell/defaults/ai/prompts/ii-Imouto.md b/.config/quickshell/ii/defaults/ai/prompts/ii-Imouto.md similarity index 100% rename from .config/quickshell/defaults/ai/prompts/ii-Imouto.md rename to .config/quickshell/ii/defaults/ai/prompts/ii-Imouto.md diff --git a/.config/quickshell/defaults/ai/prompts/w-FourPointedSparkle.md b/.config/quickshell/ii/defaults/ai/prompts/w-FourPointedSparkle.md similarity index 100% rename from .config/quickshell/defaults/ai/prompts/w-FourPointedSparkle.md rename to .config/quickshell/ii/defaults/ai/prompts/w-FourPointedSparkle.md diff --git a/.config/quickshell/defaults/ai/prompts/w-OpenMechanicalFlower.md b/.config/quickshell/ii/defaults/ai/prompts/w-OpenMechanicalFlower.md similarity index 100% rename from .config/quickshell/defaults/ai/prompts/w-OpenMechanicalFlower.md rename to .config/quickshell/ii/defaults/ai/prompts/w-OpenMechanicalFlower.md diff --git a/.config/quickshell/modules/backgroundWidgets/BackgroundWidgets.qml b/.config/quickshell/ii/modules/backgroundWidgets/BackgroundWidgets.qml similarity index 100% rename from .config/quickshell/modules/backgroundWidgets/BackgroundWidgets.qml rename to .config/quickshell/ii/modules/backgroundWidgets/BackgroundWidgets.qml diff --git a/.config/quickshell/modules/bar/ActiveWindow.qml b/.config/quickshell/ii/modules/bar/ActiveWindow.qml similarity index 100% rename from .config/quickshell/modules/bar/ActiveWindow.qml rename to .config/quickshell/ii/modules/bar/ActiveWindow.qml diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/ii/modules/bar/Bar.qml similarity index 100% rename from .config/quickshell/modules/bar/Bar.qml rename to .config/quickshell/ii/modules/bar/Bar.qml diff --git a/.config/quickshell/modules/bar/BarGroup.qml b/.config/quickshell/ii/modules/bar/BarGroup.qml similarity index 100% rename from .config/quickshell/modules/bar/BarGroup.qml rename to .config/quickshell/ii/modules/bar/BarGroup.qml diff --git a/.config/quickshell/modules/bar/BatteryIndicator.qml b/.config/quickshell/ii/modules/bar/BatteryIndicator.qml similarity index 100% rename from .config/quickshell/modules/bar/BatteryIndicator.qml rename to .config/quickshell/ii/modules/bar/BatteryIndicator.qml diff --git a/.config/quickshell/modules/bar/CircleUtilButton.qml b/.config/quickshell/ii/modules/bar/CircleUtilButton.qml similarity index 100% rename from .config/quickshell/modules/bar/CircleUtilButton.qml rename to .config/quickshell/ii/modules/bar/CircleUtilButton.qml diff --git a/.config/quickshell/modules/bar/ClockWidget.qml b/.config/quickshell/ii/modules/bar/ClockWidget.qml similarity index 100% rename from .config/quickshell/modules/bar/ClockWidget.qml rename to .config/quickshell/ii/modules/bar/ClockWidget.qml diff --git a/.config/quickshell/modules/bar/Media.qml b/.config/quickshell/ii/modules/bar/Media.qml similarity index 100% rename from .config/quickshell/modules/bar/Media.qml rename to .config/quickshell/ii/modules/bar/Media.qml diff --git a/.config/quickshell/modules/bar/Resource.qml b/.config/quickshell/ii/modules/bar/Resource.qml similarity index 100% rename from .config/quickshell/modules/bar/Resource.qml rename to .config/quickshell/ii/modules/bar/Resource.qml diff --git a/.config/quickshell/modules/bar/Resources.qml b/.config/quickshell/ii/modules/bar/Resources.qml similarity index 100% rename from .config/quickshell/modules/bar/Resources.qml rename to .config/quickshell/ii/modules/bar/Resources.qml diff --git a/.config/quickshell/modules/bar/ScrollHint.qml b/.config/quickshell/ii/modules/bar/ScrollHint.qml similarity index 100% rename from .config/quickshell/modules/bar/ScrollHint.qml rename to .config/quickshell/ii/modules/bar/ScrollHint.qml diff --git a/.config/quickshell/modules/bar/SysTray.qml b/.config/quickshell/ii/modules/bar/SysTray.qml similarity index 100% rename from .config/quickshell/modules/bar/SysTray.qml rename to .config/quickshell/ii/modules/bar/SysTray.qml diff --git a/.config/quickshell/modules/bar/SysTrayItem.qml b/.config/quickshell/ii/modules/bar/SysTrayItem.qml similarity index 100% rename from .config/quickshell/modules/bar/SysTrayItem.qml rename to .config/quickshell/ii/modules/bar/SysTrayItem.qml diff --git a/.config/quickshell/modules/bar/UtilButtons.qml b/.config/quickshell/ii/modules/bar/UtilButtons.qml similarity index 100% rename from .config/quickshell/modules/bar/UtilButtons.qml rename to .config/quickshell/ii/modules/bar/UtilButtons.qml diff --git a/.config/quickshell/modules/bar/Workspaces.qml b/.config/quickshell/ii/modules/bar/Workspaces.qml similarity index 100% rename from .config/quickshell/modules/bar/Workspaces.qml rename to .config/quickshell/ii/modules/bar/Workspaces.qml diff --git a/.config/quickshell/modules/bar/weather/WeatherBar.qml b/.config/quickshell/ii/modules/bar/weather/WeatherBar.qml similarity index 100% rename from .config/quickshell/modules/bar/weather/WeatherBar.qml rename to .config/quickshell/ii/modules/bar/weather/WeatherBar.qml diff --git a/.config/quickshell/modules/bar/weather/WeatherCard.qml b/.config/quickshell/ii/modules/bar/weather/WeatherCard.qml similarity index 100% rename from .config/quickshell/modules/bar/weather/WeatherCard.qml rename to .config/quickshell/ii/modules/bar/weather/WeatherCard.qml diff --git a/.config/quickshell/modules/bar/weather/WeatherIcons.qml b/.config/quickshell/ii/modules/bar/weather/WeatherIcons.qml similarity index 100% rename from .config/quickshell/modules/bar/weather/WeatherIcons.qml rename to .config/quickshell/ii/modules/bar/weather/WeatherIcons.qml diff --git a/.config/quickshell/modules/bar/weather/WeatherPopup.qml b/.config/quickshell/ii/modules/bar/weather/WeatherPopup.qml similarity index 100% rename from .config/quickshell/modules/bar/weather/WeatherPopup.qml rename to .config/quickshell/ii/modules/bar/weather/WeatherPopup.qml diff --git a/.config/quickshell/modules/cheatsheet/Cheatsheet.qml b/.config/quickshell/ii/modules/cheatsheet/Cheatsheet.qml similarity index 100% rename from .config/quickshell/modules/cheatsheet/Cheatsheet.qml rename to .config/quickshell/ii/modules/cheatsheet/Cheatsheet.qml diff --git a/.config/quickshell/modules/cheatsheet/CheatsheetKeybinds.qml b/.config/quickshell/ii/modules/cheatsheet/CheatsheetKeybinds.qml similarity index 100% rename from .config/quickshell/modules/cheatsheet/CheatsheetKeybinds.qml rename to .config/quickshell/ii/modules/cheatsheet/CheatsheetKeybinds.qml diff --git a/.config/quickshell/modules/cheatsheet/CheatsheetPeriodicTable.qml b/.config/quickshell/ii/modules/cheatsheet/CheatsheetPeriodicTable.qml similarity index 100% rename from .config/quickshell/modules/cheatsheet/CheatsheetPeriodicTable.qml rename to .config/quickshell/ii/modules/cheatsheet/CheatsheetPeriodicTable.qml diff --git a/.config/quickshell/modules/cheatsheet/ElementTile.qml b/.config/quickshell/ii/modules/cheatsheet/ElementTile.qml similarity index 100% rename from .config/quickshell/modules/cheatsheet/ElementTile.qml rename to .config/quickshell/ii/modules/cheatsheet/ElementTile.qml diff --git a/.config/quickshell/modules/cheatsheet/periodic_table.js b/.config/quickshell/ii/modules/cheatsheet/periodic_table.js similarity index 100% rename from .config/quickshell/modules/cheatsheet/periodic_table.js rename to .config/quickshell/ii/modules/cheatsheet/periodic_table.js diff --git a/.config/quickshell/modules/common/Appearance.qml b/.config/quickshell/ii/modules/common/Appearance.qml similarity index 100% rename from .config/quickshell/modules/common/Appearance.qml rename to .config/quickshell/ii/modules/common/Appearance.qml diff --git a/.config/quickshell/modules/common/Config.qml b/.config/quickshell/ii/modules/common/Config.qml similarity index 100% rename from .config/quickshell/modules/common/Config.qml rename to .config/quickshell/ii/modules/common/Config.qml diff --git a/.config/quickshell/modules/common/Directories.qml b/.config/quickshell/ii/modules/common/Directories.qml similarity index 91% rename from .config/quickshell/modules/common/Directories.qml rename to .config/quickshell/ii/modules/common/Directories.qml index f4eb448cf..38cfd73d7 100644 --- a/.config/quickshell/modules/common/Directories.qml +++ b/.config/quickshell/ii/modules/common/Directories.qml @@ -16,7 +16,8 @@ Singleton { readonly property string downloads: StandardPaths.standardLocations(StandardPaths.DownloadLocation)[0] // Other dirs used by the shell, without "file://" - property string scriptPath: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/scripts`) + property string assetsPath: Quickshell.configPath("assets") + property string scriptPath: Quickshell.configPath("scripts") property string favicons: FileUtils.trimFileProtocol(`${Directories.cache}/media/favicons`) property string coverArt: FileUtils.trimFileProtocol(`${Directories.cache}/media/coverart`) property string booruPreviews: FileUtils.trimFileProtocol(`${Directories.cache}/media/boorus`) @@ -30,8 +31,9 @@ Singleton { property string notificationsPath: FileUtils.trimFileProtocol(`${Directories.cache}/notifications/notifications.json`) property string generatedMaterialThemePath: FileUtils.trimFileProtocol(`${Directories.state}/user/generated/colors.json`) property string cliphistDecode: FileUtils.trimFileProtocol(`/tmp/quickshell/media/cliphist`) + property string screenshotTemp: "/tmp/quickshell/media/screenshot" property string wallpaperSwitchScriptPath: FileUtils.trimFileProtocol(`${Directories.scriptPath}/colors/switchwall.sh`) - property string defaultAiPrompts: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/defaults/ai/prompts`) + property string defaultAiPrompts: Quickshell.configPath("defaults/ai/prompts") property string userAiPrompts: FileUtils.trimFileProtocol(`${Directories.shellConfig}/ai/prompts`) property string aiChats: FileUtils.trimFileProtocol(`${Directories.state}/user/ai/chats`) // Cleanup on init diff --git a/.config/quickshell/modules/common/Persistent.qml b/.config/quickshell/ii/modules/common/Persistent.qml similarity index 100% rename from .config/quickshell/modules/common/Persistent.qml rename to .config/quickshell/ii/modules/common/Persistent.qml diff --git a/.config/quickshell/modules/common/PersistentStates.qml b/.config/quickshell/ii/modules/common/PersistentStates.qml similarity index 100% rename from .config/quickshell/modules/common/PersistentStates.qml rename to .config/quickshell/ii/modules/common/PersistentStates.qml diff --git a/.config/quickshell/modules/common/functions/color_utils.js b/.config/quickshell/ii/modules/common/functions/color_utils.js similarity index 100% rename from .config/quickshell/modules/common/functions/color_utils.js rename to .config/quickshell/ii/modules/common/functions/color_utils.js diff --git a/.config/quickshell/modules/common/functions/file_utils.js b/.config/quickshell/ii/modules/common/functions/file_utils.js similarity index 100% rename from .config/quickshell/modules/common/functions/file_utils.js rename to .config/quickshell/ii/modules/common/functions/file_utils.js diff --git a/.config/quickshell/modules/common/functions/fuzzysort.js b/.config/quickshell/ii/modules/common/functions/fuzzysort.js similarity index 100% rename from .config/quickshell/modules/common/functions/fuzzysort.js rename to .config/quickshell/ii/modules/common/functions/fuzzysort.js diff --git a/.config/quickshell/modules/common/functions/levendist.js b/.config/quickshell/ii/modules/common/functions/levendist.js similarity index 100% rename from .config/quickshell/modules/common/functions/levendist.js rename to .config/quickshell/ii/modules/common/functions/levendist.js diff --git a/.config/quickshell/modules/common/functions/object_utils.js b/.config/quickshell/ii/modules/common/functions/object_utils.js similarity index 100% rename from .config/quickshell/modules/common/functions/object_utils.js rename to .config/quickshell/ii/modules/common/functions/object_utils.js diff --git a/.config/quickshell/modules/common/functions/string_utils.js b/.config/quickshell/ii/modules/common/functions/string_utils.js similarity index 100% rename from .config/quickshell/modules/common/functions/string_utils.js rename to .config/quickshell/ii/modules/common/functions/string_utils.js diff --git a/.config/quickshell/modules/common/widgets/ButtonGroup.qml b/.config/quickshell/ii/modules/common/widgets/ButtonGroup.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ButtonGroup.qml rename to .config/quickshell/ii/modules/common/widgets/ButtonGroup.qml diff --git a/.config/quickshell/modules/common/widgets/CircularProgress.qml b/.config/quickshell/ii/modules/common/widgets/CircularProgress.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/CircularProgress.qml rename to .config/quickshell/ii/modules/common/widgets/CircularProgress.qml diff --git a/.config/quickshell/modules/common/widgets/CliphistImage.qml b/.config/quickshell/ii/modules/common/widgets/CliphistImage.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/CliphistImage.qml rename to .config/quickshell/ii/modules/common/widgets/CliphistImage.qml diff --git a/.config/quickshell/modules/common/widgets/ConfigRow.qml b/.config/quickshell/ii/modules/common/widgets/ConfigRow.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ConfigRow.qml rename to .config/quickshell/ii/modules/common/widgets/ConfigRow.qml diff --git a/.config/quickshell/modules/common/widgets/ConfigSelectionArray.qml b/.config/quickshell/ii/modules/common/widgets/ConfigSelectionArray.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ConfigSelectionArray.qml rename to .config/quickshell/ii/modules/common/widgets/ConfigSelectionArray.qml diff --git a/.config/quickshell/modules/common/widgets/ConfigSpinBox.qml b/.config/quickshell/ii/modules/common/widgets/ConfigSpinBox.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ConfigSpinBox.qml rename to .config/quickshell/ii/modules/common/widgets/ConfigSpinBox.qml diff --git a/.config/quickshell/modules/common/widgets/ConfigSwitch.qml b/.config/quickshell/ii/modules/common/widgets/ConfigSwitch.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ConfigSwitch.qml rename to .config/quickshell/ii/modules/common/widgets/ConfigSwitch.qml diff --git a/.config/quickshell/modules/common/widgets/ContentPage.qml b/.config/quickshell/ii/modules/common/widgets/ContentPage.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ContentPage.qml rename to .config/quickshell/ii/modules/common/widgets/ContentPage.qml diff --git a/.config/quickshell/modules/common/widgets/ContentSection.qml b/.config/quickshell/ii/modules/common/widgets/ContentSection.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ContentSection.qml rename to .config/quickshell/ii/modules/common/widgets/ContentSection.qml diff --git a/.config/quickshell/modules/common/widgets/ContentSubsection.qml b/.config/quickshell/ii/modules/common/widgets/ContentSubsection.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ContentSubsection.qml rename to .config/quickshell/ii/modules/common/widgets/ContentSubsection.qml diff --git a/.config/quickshell/modules/common/widgets/ContentSubsectionLabel.qml b/.config/quickshell/ii/modules/common/widgets/ContentSubsectionLabel.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/ContentSubsectionLabel.qml rename to .config/quickshell/ii/modules/common/widgets/ContentSubsectionLabel.qml diff --git a/.config/quickshell/modules/common/widgets/CustomIcon.qml b/.config/quickshell/ii/modules/common/widgets/CustomIcon.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/CustomIcon.qml rename to .config/quickshell/ii/modules/common/widgets/CustomIcon.qml diff --git a/.config/quickshell/modules/common/widgets/DialogButton.qml b/.config/quickshell/ii/modules/common/widgets/DialogButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/DialogButton.qml rename to .config/quickshell/ii/modules/common/widgets/DialogButton.qml diff --git a/.config/quickshell/modules/common/widgets/DragManager.qml b/.config/quickshell/ii/modules/common/widgets/DragManager.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/DragManager.qml rename to .config/quickshell/ii/modules/common/widgets/DragManager.qml diff --git a/.config/quickshell/modules/common/widgets/Favicon.qml b/.config/quickshell/ii/modules/common/widgets/Favicon.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/Favicon.qml rename to .config/quickshell/ii/modules/common/widgets/Favicon.qml diff --git a/.config/quickshell/modules/common/widgets/FloatingActionButton.qml b/.config/quickshell/ii/modules/common/widgets/FloatingActionButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/FloatingActionButton.qml rename to .config/quickshell/ii/modules/common/widgets/FloatingActionButton.qml diff --git a/.config/quickshell/modules/common/widgets/FlowButtonGroup.qml b/.config/quickshell/ii/modules/common/widgets/FlowButtonGroup.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/FlowButtonGroup.qml rename to .config/quickshell/ii/modules/common/widgets/FlowButtonGroup.qml diff --git a/.config/quickshell/modules/common/widgets/GroupButton.qml b/.config/quickshell/ii/modules/common/widgets/GroupButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/GroupButton.qml rename to .config/quickshell/ii/modules/common/widgets/GroupButton.qml diff --git a/.config/quickshell/modules/common/widgets/KeyboardKey.qml b/.config/quickshell/ii/modules/common/widgets/KeyboardKey.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/KeyboardKey.qml rename to .config/quickshell/ii/modules/common/widgets/KeyboardKey.qml diff --git a/.config/quickshell/modules/common/widgets/LightDarkPreferenceButton.qml b/.config/quickshell/ii/modules/common/widgets/LightDarkPreferenceButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/LightDarkPreferenceButton.qml rename to .config/quickshell/ii/modules/common/widgets/LightDarkPreferenceButton.qml diff --git a/.config/quickshell/modules/common/widgets/MaterialSymbol.qml b/.config/quickshell/ii/modules/common/widgets/MaterialSymbol.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/MaterialSymbol.qml rename to .config/quickshell/ii/modules/common/widgets/MaterialSymbol.qml diff --git a/.config/quickshell/modules/common/widgets/MaterialTextField.qml b/.config/quickshell/ii/modules/common/widgets/MaterialTextField.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/MaterialTextField.qml rename to .config/quickshell/ii/modules/common/widgets/MaterialTextField.qml diff --git a/.config/quickshell/modules/common/widgets/MenuButton.qml b/.config/quickshell/ii/modules/common/widgets/MenuButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/MenuButton.qml rename to .config/quickshell/ii/modules/common/widgets/MenuButton.qml diff --git a/.config/quickshell/modules/common/widgets/NavigationRail.qml b/.config/quickshell/ii/modules/common/widgets/NavigationRail.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NavigationRail.qml rename to .config/quickshell/ii/modules/common/widgets/NavigationRail.qml diff --git a/.config/quickshell/modules/common/widgets/NavigationRailButton.qml b/.config/quickshell/ii/modules/common/widgets/NavigationRailButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NavigationRailButton.qml rename to .config/quickshell/ii/modules/common/widgets/NavigationRailButton.qml diff --git a/.config/quickshell/modules/common/widgets/NavigationRailExpandButton.qml b/.config/quickshell/ii/modules/common/widgets/NavigationRailExpandButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NavigationRailExpandButton.qml rename to .config/quickshell/ii/modules/common/widgets/NavigationRailExpandButton.qml diff --git a/.config/quickshell/modules/common/widgets/NavigationRailTabArray.qml b/.config/quickshell/ii/modules/common/widgets/NavigationRailTabArray.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NavigationRailTabArray.qml rename to .config/quickshell/ii/modules/common/widgets/NavigationRailTabArray.qml diff --git a/.config/quickshell/modules/common/widgets/NotificationActionButton.qml b/.config/quickshell/ii/modules/common/widgets/NotificationActionButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NotificationActionButton.qml rename to .config/quickshell/ii/modules/common/widgets/NotificationActionButton.qml diff --git a/.config/quickshell/modules/common/widgets/NotificationAppIcon.qml b/.config/quickshell/ii/modules/common/widgets/NotificationAppIcon.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NotificationAppIcon.qml rename to .config/quickshell/ii/modules/common/widgets/NotificationAppIcon.qml diff --git a/.config/quickshell/modules/common/widgets/NotificationGroup.qml b/.config/quickshell/ii/modules/common/widgets/NotificationGroup.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NotificationGroup.qml rename to .config/quickshell/ii/modules/common/widgets/NotificationGroup.qml diff --git a/.config/quickshell/modules/common/widgets/NotificationGroupExpandButton.qml b/.config/quickshell/ii/modules/common/widgets/NotificationGroupExpandButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NotificationGroupExpandButton.qml rename to .config/quickshell/ii/modules/common/widgets/NotificationGroupExpandButton.qml diff --git a/.config/quickshell/modules/common/widgets/NotificationItem.qml b/.config/quickshell/ii/modules/common/widgets/NotificationItem.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NotificationItem.qml rename to .config/quickshell/ii/modules/common/widgets/NotificationItem.qml diff --git a/.config/quickshell/modules/common/widgets/NotificationListView.qml b/.config/quickshell/ii/modules/common/widgets/NotificationListView.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/NotificationListView.qml rename to .config/quickshell/ii/modules/common/widgets/NotificationListView.qml diff --git a/.config/quickshell/modules/common/widgets/PointingHandInteraction.qml b/.config/quickshell/ii/modules/common/widgets/PointingHandInteraction.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/PointingHandInteraction.qml rename to .config/quickshell/ii/modules/common/widgets/PointingHandInteraction.qml diff --git a/.config/quickshell/modules/common/widgets/PointingHandLinkHover.qml b/.config/quickshell/ii/modules/common/widgets/PointingHandLinkHover.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/PointingHandLinkHover.qml rename to .config/quickshell/ii/modules/common/widgets/PointingHandLinkHover.qml diff --git a/.config/quickshell/modules/common/widgets/PrimaryTabBar.qml b/.config/quickshell/ii/modules/common/widgets/PrimaryTabBar.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/PrimaryTabBar.qml rename to .config/quickshell/ii/modules/common/widgets/PrimaryTabBar.qml diff --git a/.config/quickshell/modules/common/widgets/PrimaryTabButton.qml b/.config/quickshell/ii/modules/common/widgets/PrimaryTabButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/PrimaryTabButton.qml rename to .config/quickshell/ii/modules/common/widgets/PrimaryTabButton.qml diff --git a/.config/quickshell/modules/common/widgets/Revealer.qml b/.config/quickshell/ii/modules/common/widgets/Revealer.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/Revealer.qml rename to .config/quickshell/ii/modules/common/widgets/Revealer.qml diff --git a/.config/quickshell/modules/common/widgets/RippleButton.qml b/.config/quickshell/ii/modules/common/widgets/RippleButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/RippleButton.qml rename to .config/quickshell/ii/modules/common/widgets/RippleButton.qml diff --git a/.config/quickshell/modules/common/widgets/RippleButtonWithIcon.qml b/.config/quickshell/ii/modules/common/widgets/RippleButtonWithIcon.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/RippleButtonWithIcon.qml rename to .config/quickshell/ii/modules/common/widgets/RippleButtonWithIcon.qml diff --git a/.config/quickshell/modules/common/widgets/RoundCorner.qml b/.config/quickshell/ii/modules/common/widgets/RoundCorner.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/RoundCorner.qml rename to .config/quickshell/ii/modules/common/widgets/RoundCorner.qml diff --git a/.config/quickshell/modules/common/widgets/SecondaryTabButton.qml b/.config/quickshell/ii/modules/common/widgets/SecondaryTabButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/SecondaryTabButton.qml rename to .config/quickshell/ii/modules/common/widgets/SecondaryTabButton.qml diff --git a/.config/quickshell/modules/common/widgets/SelectionDialog.qml b/.config/quickshell/ii/modules/common/widgets/SelectionDialog.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/SelectionDialog.qml rename to .config/quickshell/ii/modules/common/widgets/SelectionDialog.qml diff --git a/.config/quickshell/modules/common/widgets/SelectionGroupButton.qml b/.config/quickshell/ii/modules/common/widgets/SelectionGroupButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/SelectionGroupButton.qml rename to .config/quickshell/ii/modules/common/widgets/SelectionGroupButton.qml diff --git a/.config/quickshell/modules/common/widgets/StyledLabel.qml b/.config/quickshell/ii/modules/common/widgets/StyledLabel.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledLabel.qml rename to .config/quickshell/ii/modules/common/widgets/StyledLabel.qml diff --git a/.config/quickshell/modules/common/widgets/StyledListView.qml b/.config/quickshell/ii/modules/common/widgets/StyledListView.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledListView.qml rename to .config/quickshell/ii/modules/common/widgets/StyledListView.qml diff --git a/.config/quickshell/modules/common/widgets/StyledProgressBar.qml b/.config/quickshell/ii/modules/common/widgets/StyledProgressBar.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledProgressBar.qml rename to .config/quickshell/ii/modules/common/widgets/StyledProgressBar.qml diff --git a/.config/quickshell/modules/common/widgets/StyledRadioButton.qml b/.config/quickshell/ii/modules/common/widgets/StyledRadioButton.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledRadioButton.qml rename to .config/quickshell/ii/modules/common/widgets/StyledRadioButton.qml diff --git a/.config/quickshell/modules/common/widgets/StyledRectangularShadow.qml b/.config/quickshell/ii/modules/common/widgets/StyledRectangularShadow.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledRectangularShadow.qml rename to .config/quickshell/ii/modules/common/widgets/StyledRectangularShadow.qml diff --git a/.config/quickshell/modules/common/widgets/StyledSlider.qml b/.config/quickshell/ii/modules/common/widgets/StyledSlider.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledSlider.qml rename to .config/quickshell/ii/modules/common/widgets/StyledSlider.qml diff --git a/.config/quickshell/modules/common/widgets/StyledSpinBox.qml b/.config/quickshell/ii/modules/common/widgets/StyledSpinBox.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledSpinBox.qml rename to .config/quickshell/ii/modules/common/widgets/StyledSpinBox.qml diff --git a/.config/quickshell/modules/common/widgets/StyledSwitch.qml b/.config/quickshell/ii/modules/common/widgets/StyledSwitch.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledSwitch.qml rename to .config/quickshell/ii/modules/common/widgets/StyledSwitch.qml diff --git a/.config/quickshell/modules/common/widgets/StyledText.qml b/.config/quickshell/ii/modules/common/widgets/StyledText.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledText.qml rename to .config/quickshell/ii/modules/common/widgets/StyledText.qml diff --git a/.config/quickshell/modules/common/widgets/StyledTextArea.qml b/.config/quickshell/ii/modules/common/widgets/StyledTextArea.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledTextArea.qml rename to .config/quickshell/ii/modules/common/widgets/StyledTextArea.qml diff --git a/.config/quickshell/modules/common/widgets/StyledTextInput.qml b/.config/quickshell/ii/modules/common/widgets/StyledTextInput.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledTextInput.qml rename to .config/quickshell/ii/modules/common/widgets/StyledTextInput.qml diff --git a/.config/quickshell/modules/common/widgets/StyledToolTip.qml b/.config/quickshell/ii/modules/common/widgets/StyledToolTip.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/StyledToolTip.qml rename to .config/quickshell/ii/modules/common/widgets/StyledToolTip.qml diff --git a/.config/quickshell/modules/common/widgets/VerticalButtonGroup.qml b/.config/quickshell/ii/modules/common/widgets/VerticalButtonGroup.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/VerticalButtonGroup.qml rename to .config/quickshell/ii/modules/common/widgets/VerticalButtonGroup.qml diff --git a/.config/quickshell/modules/common/widgets/WaveVisualizer.qml b/.config/quickshell/ii/modules/common/widgets/WaveVisualizer.qml similarity index 100% rename from .config/quickshell/modules/common/widgets/WaveVisualizer.qml rename to .config/quickshell/ii/modules/common/widgets/WaveVisualizer.qml diff --git a/.config/quickshell/modules/common/widgets/notification_utils.js b/.config/quickshell/ii/modules/common/widgets/notification_utils.js similarity index 100% rename from .config/quickshell/modules/common/widgets/notification_utils.js rename to .config/quickshell/ii/modules/common/widgets/notification_utils.js diff --git a/.config/quickshell/modules/dock/Dock.qml b/.config/quickshell/ii/modules/dock/Dock.qml similarity index 100% rename from .config/quickshell/modules/dock/Dock.qml rename to .config/quickshell/ii/modules/dock/Dock.qml diff --git a/.config/quickshell/modules/dock/DockAppButton.qml b/.config/quickshell/ii/modules/dock/DockAppButton.qml similarity index 100% rename from .config/quickshell/modules/dock/DockAppButton.qml rename to .config/quickshell/ii/modules/dock/DockAppButton.qml diff --git a/.config/quickshell/modules/dock/DockApps.qml b/.config/quickshell/ii/modules/dock/DockApps.qml similarity index 100% rename from .config/quickshell/modules/dock/DockApps.qml rename to .config/quickshell/ii/modules/dock/DockApps.qml diff --git a/.config/quickshell/modules/dock/DockButton.qml b/.config/quickshell/ii/modules/dock/DockButton.qml similarity index 100% rename from .config/quickshell/modules/dock/DockButton.qml rename to .config/quickshell/ii/modules/dock/DockButton.qml diff --git a/.config/quickshell/modules/dock/DockSeparator.qml b/.config/quickshell/ii/modules/dock/DockSeparator.qml similarity index 100% rename from .config/quickshell/modules/dock/DockSeparator.qml rename to .config/quickshell/ii/modules/dock/DockSeparator.qml diff --git a/.config/quickshell/modules/mediaControls/MediaControls.qml b/.config/quickshell/ii/modules/mediaControls/MediaControls.qml similarity index 99% rename from .config/quickshell/modules/mediaControls/MediaControls.qml rename to .config/quickshell/ii/modules/mediaControls/MediaControls.qml index 446fa91c8..0dde4d126 100644 --- a/.config/quickshell/modules/mediaControls/MediaControls.qml +++ b/.config/quickshell/ii/modules/mediaControls/MediaControls.qml @@ -79,7 +79,7 @@ Scope { root.visualizerPoints = []; } } - command: ["cava", "-p", `${FileUtils.trimFileProtocol(Directories.config)}/quickshell/scripts/cava/raw_output_config.txt`] + command: ["cava", "-p", `${FileUtils.trimFileProtocol(Directories.scriptPath)}/cava/raw_output_config.txt`] stdout: SplitParser { onRead: data => { // Parse `;`-separated values into the visualizerPoints array diff --git a/.config/quickshell/modules/mediaControls/PlayerControl.qml b/.config/quickshell/ii/modules/mediaControls/PlayerControl.qml similarity index 100% rename from .config/quickshell/modules/mediaControls/PlayerControl.qml rename to .config/quickshell/ii/modules/mediaControls/PlayerControl.qml diff --git a/.config/quickshell/modules/notificationPopup/NotificationPopup.qml b/.config/quickshell/ii/modules/notificationPopup/NotificationPopup.qml similarity index 100% rename from .config/quickshell/modules/notificationPopup/NotificationPopup.qml rename to .config/quickshell/ii/modules/notificationPopup/NotificationPopup.qml diff --git a/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayBrightness.qml b/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayBrightness.qml similarity index 100% rename from .config/quickshell/modules/onScreenDisplay/OnScreenDisplayBrightness.qml rename to .config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayBrightness.qml diff --git a/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayVolume.qml b/.config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayVolume.qml similarity index 100% rename from .config/quickshell/modules/onScreenDisplay/OnScreenDisplayVolume.qml rename to .config/quickshell/ii/modules/onScreenDisplay/OnScreenDisplayVolume.qml diff --git a/.config/quickshell/modules/onScreenDisplay/OsdValueIndicator.qml b/.config/quickshell/ii/modules/onScreenDisplay/OsdValueIndicator.qml similarity index 100% rename from .config/quickshell/modules/onScreenDisplay/OsdValueIndicator.qml rename to .config/quickshell/ii/modules/onScreenDisplay/OsdValueIndicator.qml diff --git a/.config/quickshell/modules/onScreenKeyboard/OnScreenKeyboard.qml b/.config/quickshell/ii/modules/onScreenKeyboard/OnScreenKeyboard.qml similarity index 100% rename from .config/quickshell/modules/onScreenKeyboard/OnScreenKeyboard.qml rename to .config/quickshell/ii/modules/onScreenKeyboard/OnScreenKeyboard.qml diff --git a/.config/quickshell/modules/onScreenKeyboard/OskContent.qml b/.config/quickshell/ii/modules/onScreenKeyboard/OskContent.qml similarity index 100% rename from .config/quickshell/modules/onScreenKeyboard/OskContent.qml rename to .config/quickshell/ii/modules/onScreenKeyboard/OskContent.qml diff --git a/.config/quickshell/modules/onScreenKeyboard/OskKey.qml b/.config/quickshell/ii/modules/onScreenKeyboard/OskKey.qml similarity index 100% rename from .config/quickshell/modules/onScreenKeyboard/OskKey.qml rename to .config/quickshell/ii/modules/onScreenKeyboard/OskKey.qml diff --git a/.config/quickshell/modules/onScreenKeyboard/layouts.js b/.config/quickshell/ii/modules/onScreenKeyboard/layouts.js similarity index 100% rename from .config/quickshell/modules/onScreenKeyboard/layouts.js rename to .config/quickshell/ii/modules/onScreenKeyboard/layouts.js diff --git a/.config/quickshell/modules/overview/Overview.qml b/.config/quickshell/ii/modules/overview/Overview.qml similarity index 100% rename from .config/quickshell/modules/overview/Overview.qml rename to .config/quickshell/ii/modules/overview/Overview.qml diff --git a/.config/quickshell/modules/overview/OverviewWidget.qml b/.config/quickshell/ii/modules/overview/OverviewWidget.qml similarity index 100% rename from .config/quickshell/modules/overview/OverviewWidget.qml rename to .config/quickshell/ii/modules/overview/OverviewWidget.qml diff --git a/.config/quickshell/modules/overview/OverviewWindow.qml b/.config/quickshell/ii/modules/overview/OverviewWindow.qml similarity index 100% rename from .config/quickshell/modules/overview/OverviewWindow.qml rename to .config/quickshell/ii/modules/overview/OverviewWindow.qml diff --git a/.config/quickshell/modules/overview/SearchItem.qml b/.config/quickshell/ii/modules/overview/SearchItem.qml similarity index 100% rename from .config/quickshell/modules/overview/SearchItem.qml rename to .config/quickshell/ii/modules/overview/SearchItem.qml diff --git a/.config/quickshell/modules/overview/SearchWidget.qml b/.config/quickshell/ii/modules/overview/SearchWidget.qml similarity index 100% rename from .config/quickshell/modules/overview/SearchWidget.qml rename to .config/quickshell/ii/modules/overview/SearchWidget.qml diff --git a/.config/quickshell/modules/screenCorners/ScreenCorners.qml b/.config/quickshell/ii/modules/screenCorners/ScreenCorners.qml similarity index 100% rename from .config/quickshell/modules/screenCorners/ScreenCorners.qml rename to .config/quickshell/ii/modules/screenCorners/ScreenCorners.qml diff --git a/.config/quickshell/modules/session/Session.qml b/.config/quickshell/ii/modules/session/Session.qml similarity index 100% rename from .config/quickshell/modules/session/Session.qml rename to .config/quickshell/ii/modules/session/Session.qml diff --git a/.config/quickshell/modules/session/SessionActionButton.qml b/.config/quickshell/ii/modules/session/SessionActionButton.qml similarity index 100% rename from .config/quickshell/modules/session/SessionActionButton.qml rename to .config/quickshell/ii/modules/session/SessionActionButton.qml diff --git a/.config/quickshell/modules/settings/About.qml b/.config/quickshell/ii/modules/settings/About.qml similarity index 100% rename from .config/quickshell/modules/settings/About.qml rename to .config/quickshell/ii/modules/settings/About.qml diff --git a/.config/quickshell/modules/settings/InterfaceConfig.qml b/.config/quickshell/ii/modules/settings/InterfaceConfig.qml similarity index 100% rename from .config/quickshell/modules/settings/InterfaceConfig.qml rename to .config/quickshell/ii/modules/settings/InterfaceConfig.qml diff --git a/.config/quickshell/modules/settings/ServicesConfig.qml b/.config/quickshell/ii/modules/settings/ServicesConfig.qml similarity index 100% rename from .config/quickshell/modules/settings/ServicesConfig.qml rename to .config/quickshell/ii/modules/settings/ServicesConfig.qml diff --git a/.config/quickshell/modules/settings/StyleConfig.qml b/.config/quickshell/ii/modules/settings/StyleConfig.qml similarity index 99% rename from .config/quickshell/modules/settings/StyleConfig.qml rename to .config/quickshell/ii/modules/settings/StyleConfig.qml index 6de02639a..bc1998c81 100644 --- a/.config/quickshell/modules/settings/StyleConfig.qml +++ b/.config/quickshell/ii/modules/settings/StyleConfig.qml @@ -18,7 +18,7 @@ ContentPage { Process { id: konachanWallProc property string status: "" - command: ["bash", "-c", FileUtils.trimFileProtocol(`${Directories.config}/quickshell/scripts/colors/random_konachan_wall.sh`)] + command: ["bash", "-c", FileUtils.trimFileProtocol(`${Directories.scriptPath}/colors/random_konachan_wall.sh`)] stdout: SplitParser { onRead: data => { console.log(`Konachan wall proc output: ${data}`); diff --git a/.config/quickshell/modules/sidebarLeft/AiChat.qml b/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml similarity index 99% rename from .config/quickshell/modules/sidebarLeft/AiChat.qml rename to .config/quickshell/ii/modules/sidebarLeft/AiChat.qml index b6ef48c10..6c4e65f97 100644 --- a/.config/quickshell/modules/sidebarLeft/AiChat.qml +++ b/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml @@ -129,7 +129,7 @@ Mowe uwu wem ipsum! ### Formatting - *Italic*, \`Monospace\`, **Bold**, [Link](https://example.com) -- Arch lincox icon +- Arch lincox icon ### Table diff --git a/.config/quickshell/modules/sidebarLeft/Anime.qml b/.config/quickshell/ii/modules/sidebarLeft/Anime.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/Anime.qml rename to .config/quickshell/ii/modules/sidebarLeft/Anime.qml diff --git a/.config/quickshell/modules/sidebarLeft/ApiCommandButton.qml b/.config/quickshell/ii/modules/sidebarLeft/ApiCommandButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/ApiCommandButton.qml rename to .config/quickshell/ii/modules/sidebarLeft/ApiCommandButton.qml diff --git a/.config/quickshell/modules/sidebarLeft/DescriptionBox.qml b/.config/quickshell/ii/modules/sidebarLeft/DescriptionBox.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/DescriptionBox.qml rename to .config/quickshell/ii/modules/sidebarLeft/DescriptionBox.qml diff --git a/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml b/.config/quickshell/ii/modules/sidebarLeft/SidebarLeft.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/SidebarLeft.qml rename to .config/quickshell/ii/modules/sidebarLeft/SidebarLeft.qml diff --git a/.config/quickshell/modules/sidebarLeft/SidebarLeftContent.qml b/.config/quickshell/ii/modules/sidebarLeft/SidebarLeftContent.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/SidebarLeftContent.qml rename to .config/quickshell/ii/modules/sidebarLeft/SidebarLeftContent.qml diff --git a/.config/quickshell/modules/sidebarLeft/Translator.qml b/.config/quickshell/ii/modules/sidebarLeft/Translator.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/Translator.qml rename to .config/quickshell/ii/modules/sidebarLeft/Translator.qml diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/AiMessage.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml rename to .config/quickshell/ii/modules/sidebarLeft/aiChat/AiMessage.qml diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/AiMessageControlButton.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/AiMessageControlButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/aiChat/AiMessageControlButton.qml rename to .config/quickshell/ii/modules/sidebarLeft/aiChat/AiMessageControlButton.qml diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml rename to .config/quickshell/ii/modules/sidebarLeft/aiChat/AnnotationSourceButton.qml diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/MessageCodeBlock.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/MessageCodeBlock.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/aiChat/MessageCodeBlock.qml rename to .config/quickshell/ii/modules/sidebarLeft/aiChat/MessageCodeBlock.qml diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/MessageTextBlock.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/MessageTextBlock.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/aiChat/MessageTextBlock.qml rename to .config/quickshell/ii/modules/sidebarLeft/aiChat/MessageTextBlock.qml diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/MessageThinkBlock.qml b/.config/quickshell/ii/modules/sidebarLeft/aiChat/MessageThinkBlock.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/aiChat/MessageThinkBlock.qml rename to .config/quickshell/ii/modules/sidebarLeft/aiChat/MessageThinkBlock.qml diff --git a/.config/quickshell/modules/sidebarLeft/anime/BooruImage.qml b/.config/quickshell/ii/modules/sidebarLeft/anime/BooruImage.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/anime/BooruImage.qml rename to .config/quickshell/ii/modules/sidebarLeft/anime/BooruImage.qml diff --git a/.config/quickshell/modules/sidebarLeft/anime/BooruResponse.qml b/.config/quickshell/ii/modules/sidebarLeft/anime/BooruResponse.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/anime/BooruResponse.qml rename to .config/quickshell/ii/modules/sidebarLeft/anime/BooruResponse.qml diff --git a/.config/quickshell/modules/sidebarLeft/translator/LanguageSelectorButton.qml b/.config/quickshell/ii/modules/sidebarLeft/translator/LanguageSelectorButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/translator/LanguageSelectorButton.qml rename to .config/quickshell/ii/modules/sidebarLeft/translator/LanguageSelectorButton.qml diff --git a/.config/quickshell/modules/sidebarLeft/translator/TextCanvas.qml b/.config/quickshell/ii/modules/sidebarLeft/translator/TextCanvas.qml similarity index 100% rename from .config/quickshell/modules/sidebarLeft/translator/TextCanvas.qml rename to .config/quickshell/ii/modules/sidebarLeft/translator/TextCanvas.qml diff --git a/.config/quickshell/modules/sidebarRight/BottomWidgetGroup.qml b/.config/quickshell/ii/modules/sidebarRight/BottomWidgetGroup.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/BottomWidgetGroup.qml rename to .config/quickshell/ii/modules/sidebarRight/BottomWidgetGroup.qml diff --git a/.config/quickshell/modules/sidebarRight/CenterWidgetGroup.qml b/.config/quickshell/ii/modules/sidebarRight/CenterWidgetGroup.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/CenterWidgetGroup.qml rename to .config/quickshell/ii/modules/sidebarRight/CenterWidgetGroup.qml diff --git a/.config/quickshell/modules/sidebarRight/SidebarRight.qml b/.config/quickshell/ii/modules/sidebarRight/SidebarRight.qml similarity index 98% rename from .config/quickshell/modules/sidebarRight/SidebarRight.qml rename to .config/quickshell/ii/modules/sidebarRight/SidebarRight.qml index 71ce53dbd..ead2ff2aa 100644 --- a/.config/quickshell/modules/sidebarRight/SidebarRight.qml +++ b/.config/quickshell/ii/modules/sidebarRight/SidebarRight.qml @@ -20,7 +20,7 @@ Scope { id: root property int sidebarWidth: Appearance.sizes.sidebarWidth property int sidebarPadding: 15 - property string settingsQmlPath: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/settings.qml`) + property string settingsQmlPath: Quickshell.configPath("settings.qml") PanelWindow { id: sidebarRoot diff --git a/.config/quickshell/modules/sidebarRight/calendar/CalendarDayButton.qml b/.config/quickshell/ii/modules/sidebarRight/calendar/CalendarDayButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/calendar/CalendarDayButton.qml rename to .config/quickshell/ii/modules/sidebarRight/calendar/CalendarDayButton.qml diff --git a/.config/quickshell/modules/sidebarRight/calendar/CalendarHeaderButton.qml b/.config/quickshell/ii/modules/sidebarRight/calendar/CalendarHeaderButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/calendar/CalendarHeaderButton.qml rename to .config/quickshell/ii/modules/sidebarRight/calendar/CalendarHeaderButton.qml diff --git a/.config/quickshell/modules/sidebarRight/calendar/CalendarWidget.qml b/.config/quickshell/ii/modules/sidebarRight/calendar/CalendarWidget.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/calendar/CalendarWidget.qml rename to .config/quickshell/ii/modules/sidebarRight/calendar/CalendarWidget.qml diff --git a/.config/quickshell/modules/sidebarRight/calendar/calendar_layout.js b/.config/quickshell/ii/modules/sidebarRight/calendar/calendar_layout.js similarity index 100% rename from .config/quickshell/modules/sidebarRight/calendar/calendar_layout.js rename to .config/quickshell/ii/modules/sidebarRight/calendar/calendar_layout.js diff --git a/.config/quickshell/modules/sidebarRight/notifications/NotificationList.qml b/.config/quickshell/ii/modules/sidebarRight/notifications/NotificationList.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/notifications/NotificationList.qml rename to .config/quickshell/ii/modules/sidebarRight/notifications/NotificationList.qml diff --git a/.config/quickshell/modules/sidebarRight/notifications/NotificationStatusButton.qml b/.config/quickshell/ii/modules/sidebarRight/notifications/NotificationStatusButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/notifications/NotificationStatusButton.qml rename to .config/quickshell/ii/modules/sidebarRight/notifications/NotificationStatusButton.qml diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/BluetoothToggle.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/quickToggles/BluetoothToggle.qml rename to .config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/CloudflareWarp.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/quickToggles/CloudflareWarp.qml rename to .config/quickshell/ii/modules/sidebarRight/quickToggles/CloudflareWarp.qml diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/GameMode.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/GameMode.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/quickToggles/GameMode.qml rename to .config/quickshell/ii/modules/sidebarRight/quickToggles/GameMode.qml diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/IdleInhibitor.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/IdleInhibitor.qml similarity index 75% rename from .config/quickshell/modules/sidebarRight/quickToggles/IdleInhibitor.qml rename to .config/quickshell/ii/modules/sidebarRight/quickToggles/IdleInhibitor.qml index b48d3467f..b4b0401ea 100644 --- a/.config/quickshell/modules/sidebarRight/quickToggles/IdleInhibitor.qml +++ b/.config/quickshell/ii/modules/sidebarRight/quickToggles/IdleInhibitor.qml @@ -12,10 +12,10 @@ QuickToggleButton { onClicked: { if (toggled) { root.toggled = false - Hyprland.dispatch("exec pkill wayland-idle") // pkill doesn't accept too long names + Quickshell.execDetached(["pkill", "wayland-idle"]) // pkill doesn't accept too long names } else { root.toggled = true - Hyprland.dispatch('exec ${XDG_CONFIG_HOME:-$HOME/.config}/quickshell/scripts/wayland-idle-inhibitor.py') + Quickshell.execDetached([`${Directories.scriptPath}/wayland-idle-inhibitor.py`]) } } Process { diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/NetworkToggle.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/quickToggles/NetworkToggle.qml rename to .config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/NightLight.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/NightLight.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/quickToggles/NightLight.qml rename to .config/quickshell/ii/modules/sidebarRight/quickToggles/NightLight.qml diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/QuickToggleButton.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/QuickToggleButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/quickToggles/QuickToggleButton.qml rename to .config/quickshell/ii/modules/sidebarRight/quickToggles/QuickToggleButton.qml diff --git a/.config/quickshell/modules/sidebarRight/todo/TaskList.qml b/.config/quickshell/ii/modules/sidebarRight/todo/TaskList.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/todo/TaskList.qml rename to .config/quickshell/ii/modules/sidebarRight/todo/TaskList.qml diff --git a/.config/quickshell/modules/sidebarRight/todo/TodoItemActionButton.qml b/.config/quickshell/ii/modules/sidebarRight/todo/TodoItemActionButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/todo/TodoItemActionButton.qml rename to .config/quickshell/ii/modules/sidebarRight/todo/TodoItemActionButton.qml diff --git a/.config/quickshell/modules/sidebarRight/todo/TodoWidget.qml b/.config/quickshell/ii/modules/sidebarRight/todo/TodoWidget.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/todo/TodoWidget.qml rename to .config/quickshell/ii/modules/sidebarRight/todo/TodoWidget.qml diff --git a/.config/quickshell/modules/sidebarRight/volumeMixer/AudioDeviceSelectorButton.qml b/.config/quickshell/ii/modules/sidebarRight/volumeMixer/AudioDeviceSelectorButton.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/volumeMixer/AudioDeviceSelectorButton.qml rename to .config/quickshell/ii/modules/sidebarRight/volumeMixer/AudioDeviceSelectorButton.qml diff --git a/.config/quickshell/modules/sidebarRight/volumeMixer/VolumeMixer.qml b/.config/quickshell/ii/modules/sidebarRight/volumeMixer/VolumeMixer.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/volumeMixer/VolumeMixer.qml rename to .config/quickshell/ii/modules/sidebarRight/volumeMixer/VolumeMixer.qml diff --git a/.config/quickshell/modules/sidebarRight/volumeMixer/VolumeMixerEntry.qml b/.config/quickshell/ii/modules/sidebarRight/volumeMixer/VolumeMixerEntry.qml similarity index 100% rename from .config/quickshell/modules/sidebarRight/volumeMixer/VolumeMixerEntry.qml rename to .config/quickshell/ii/modules/sidebarRight/volumeMixer/VolumeMixerEntry.qml diff --git a/.config/quickshell/screenshot.qml b/.config/quickshell/ii/screenshot.qml similarity index 99% rename from .config/quickshell/screenshot.qml rename to .config/quickshell/ii/screenshot.qml index 4e9422fe1..f15558719 100644 --- a/.config/quickshell/screenshot.qml +++ b/.config/quickshell/ii/screenshot.qml @@ -22,7 +22,7 @@ import "./services/" ShellRoot { id: root - property string screenshotDir: "/tmp/quickshell/media/screenshot" + property string screenshotDir: Directories.screenshotTemp property color overlayColor: "#77111111" property color genericContentColor: Qt.alpha(root.overlayColor, 0.9) property color genericContentForeground: "#ddffffff" diff --git a/.config/quickshell/scripts/ai/show-installed-ollama-models.sh b/.config/quickshell/ii/scripts/ai/show-installed-ollama-models.sh similarity index 100% rename from .config/quickshell/scripts/ai/show-installed-ollama-models.sh rename to .config/quickshell/ii/scripts/ai/show-installed-ollama-models.sh diff --git a/.config/quickshell/scripts/cava/raw_output_config.txt b/.config/quickshell/ii/scripts/cava/raw_output_config.txt similarity index 100% rename from .config/quickshell/scripts/cava/raw_output_config.txt rename to .config/quickshell/ii/scripts/cava/raw_output_config.txt diff --git a/.config/quickshell/scripts/colors/applycolor.sh b/.config/quickshell/ii/scripts/colors/applycolor.sh similarity index 89% rename from .config/quickshell/scripts/colors/applycolor.sh rename to .config/quickshell/ii/scripts/colors/applycolor.sh index b36fc4d25..fe87e6553 100755 --- a/.config/quickshell/scripts/colors/applycolor.sh +++ b/.config/quickshell/ii/scripts/colors/applycolor.sh @@ -1,11 +1,12 @@ #!/usr/bin/env bash +QUICKSHELL_CONFIG_NAME="ii" XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" -CONFIG_DIR="$XDG_CONFIG_HOME/quickshell" -CACHE_DIR="$XDG_CACHE_HOME/quickshell" -STATE_DIR="$XDG_STATE_HOME/quickshell" +CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +CACHE_DIR="$XDG_CACHE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +STATE_DIR="$XDG_STATE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" term_alpha=100 #Set this to < 100 make all your terminals transparent diff --git a/.config/quickshell/scripts/colors/generate_colors_material.py b/.config/quickshell/ii/scripts/colors/generate_colors_material.py similarity index 100% rename from .config/quickshell/scripts/colors/generate_colors_material.py rename to .config/quickshell/ii/scripts/colors/generate_colors_material.py diff --git a/.config/quickshell/ii/scripts/colors/random_konachan_wall.sh b/.config/quickshell/ii/scripts/colors/random_konachan_wall.sh new file mode 100755 index 000000000..c44f3e3af --- /dev/null +++ b/.config/quickshell/ii/scripts/colors/random_konachan_wall.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +QUICKSHELL_CONFIG_NAME="ii" +XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" +XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" +XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" +CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +CACHE_DIR="$XDG_CACHE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +STATE_DIR="$XDG_STATE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +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" +"$SCRIPT_DIR/switchwall.sh" --image "$downloadPath" diff --git a/.config/quickshell/scripts/colors/scheme_for_image.py b/.config/quickshell/ii/scripts/colors/scheme_for_image.py similarity index 100% rename from .config/quickshell/scripts/colors/scheme_for_image.py rename to .config/quickshell/ii/scripts/colors/scheme_for_image.py diff --git a/.config/quickshell/scripts/colors/switchwall.sh b/.config/quickshell/ii/scripts/colors/switchwall.sh similarity index 98% rename from .config/quickshell/scripts/colors/switchwall.sh rename to .config/quickshell/ii/scripts/colors/switchwall.sh index 11cf2a432..fa834bce7 100755 --- a/.config/quickshell/scripts/colors/switchwall.sh +++ b/.config/quickshell/ii/scripts/colors/switchwall.sh @@ -1,14 +1,15 @@ #!/usr/bin/env bash +QUICKSHELL_CONFIG_NAME="ii" XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" -CONFIG_DIR="$XDG_CONFIG_HOME/quickshell" -CACHE_DIR="$XDG_CACHE_HOME/quickshell" -STATE_DIR="$XDG_STATE_HOME/quickshell" +CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +CACHE_DIR="$XDG_CACHE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +STATE_DIR="$XDG_STATE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MATUGEN_DIR="$XDG_CONFIG_HOME/matugen" -terminalscheme="$XDG_CONFIG_HOME/quickshell/scripts/terminal/scheme-base.json" +terminalscheme="$SCRIPT_DIR/terminal/scheme-base.json" handle_kde_material_you_colors() { # Map $type_flag to allowed scheme variants for kde-material-you-colors-wrapper.sh diff --git a/.config/quickshell/scripts/hyprland/get_keybinds.py b/.config/quickshell/ii/scripts/hyprland/get_keybinds.py similarity index 100% rename from .config/quickshell/scripts/hyprland/get_keybinds.py rename to .config/quickshell/ii/scripts/hyprland/get_keybinds.py diff --git a/.config/quickshell/scripts/images/find_regions.py b/.config/quickshell/ii/scripts/images/find_regions.py similarity index 100% rename from .config/quickshell/scripts/images/find_regions.py rename to .config/quickshell/ii/scripts/images/find_regions.py diff --git a/.config/quickshell/scripts/kvantum/adwsvg.py b/.config/quickshell/ii/scripts/kvantum/adwsvg.py similarity index 100% rename from .config/quickshell/scripts/kvantum/adwsvg.py rename to .config/quickshell/ii/scripts/kvantum/adwsvg.py diff --git a/.config/quickshell/scripts/kvantum/adwsvgDark.py b/.config/quickshell/ii/scripts/kvantum/adwsvgDark.py similarity index 100% rename from .config/quickshell/scripts/kvantum/adwsvgDark.py rename to .config/quickshell/ii/scripts/kvantum/adwsvgDark.py diff --git a/.config/quickshell/scripts/kvantum/changeAdwColors.py b/.config/quickshell/ii/scripts/kvantum/changeAdwColors.py similarity index 100% rename from .config/quickshell/scripts/kvantum/changeAdwColors.py rename to .config/quickshell/ii/scripts/kvantum/changeAdwColors.py diff --git a/.config/quickshell/scripts/kvantum/materialQT.sh b/.config/quickshell/ii/scripts/kvantum/materialQT.sh similarity index 80% rename from .config/quickshell/scripts/kvantum/materialQT.sh rename to .config/quickshell/ii/scripts/kvantum/materialQT.sh index 3d1f8a7bf..835706a2b 100755 --- a/.config/quickshell/scripts/kvantum/materialQT.sh +++ b/.config/quickshell/ii/scripts/kvantum/materialQT.sh @@ -1,11 +1,13 @@ #!/usr/bin/env bash +QUICKSHELL_CONFIG_NAME="ii" XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" -CONFIG_DIR="$XDG_CONFIG_HOME/quickshell" -CACHE_DIR="$XDG_CACHE_HOME/quickshell" -STATE_DIR="$XDG_STATE_HOME/quickshell" +CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +CACHE_DIR="$XDG_CACHE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +STATE_DIR="$XDG_STATE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" get_light_dark() { current_mode=$(gsettings get org.gnome.desktop.interface color-scheme 2>/dev/null | tr -d "'") diff --git a/.config/quickshell/scripts/terminal/scheme-base.json b/.config/quickshell/ii/scripts/terminal/scheme-base.json similarity index 100% rename from .config/quickshell/scripts/terminal/scheme-base.json rename to .config/quickshell/ii/scripts/terminal/scheme-base.json diff --git a/.config/quickshell/scripts/terminal/sequences.txt b/.config/quickshell/ii/scripts/terminal/sequences.txt similarity index 100% rename from .config/quickshell/scripts/terminal/sequences.txt rename to .config/quickshell/ii/scripts/terminal/sequences.txt diff --git a/.config/quickshell/scripts/wayland-idle-inhibitor.py b/.config/quickshell/ii/scripts/wayland-idle-inhibitor.py similarity index 100% rename from .config/quickshell/scripts/wayland-idle-inhibitor.py rename to .config/quickshell/ii/scripts/wayland-idle-inhibitor.py diff --git a/.config/quickshell/services/Ai.qml b/.config/quickshell/ii/services/Ai.qml similarity index 99% rename from .config/quickshell/services/Ai.qml rename to .config/quickshell/ii/services/Ai.qml index 639ae936d..24521fb63 100644 --- a/.config/quickshell/services/Ai.qml +++ b/.config/quickshell/ii/services/Ai.qml @@ -237,7 +237,7 @@ Singleton { Process { id: getOllamaModels running: true - command: ["bash", "-c", `${Directories.config}/quickshell/scripts/ai/show-installed-ollama-models.sh`.replace(/file:\/\//, "")] + command: ["bash", "-c", `${Directories.scriptPath}/ai/show-installed-ollama-models.sh`.replace(/file:\/\//, "")] stdout: SplitParser { onRead: data => { try { diff --git a/.config/quickshell/services/AiMessageData.qml b/.config/quickshell/ii/services/AiMessageData.qml similarity index 100% rename from .config/quickshell/services/AiMessageData.qml rename to .config/quickshell/ii/services/AiMessageData.qml diff --git a/.config/quickshell/services/AppSearch.qml b/.config/quickshell/ii/services/AppSearch.qml similarity index 100% rename from .config/quickshell/services/AppSearch.qml rename to .config/quickshell/ii/services/AppSearch.qml diff --git a/.config/quickshell/services/Audio.qml b/.config/quickshell/ii/services/Audio.qml similarity index 100% rename from .config/quickshell/services/Audio.qml rename to .config/quickshell/ii/services/Audio.qml diff --git a/.config/quickshell/services/Battery.qml b/.config/quickshell/ii/services/Battery.qml similarity index 100% rename from .config/quickshell/services/Battery.qml rename to .config/quickshell/ii/services/Battery.qml diff --git a/.config/quickshell/services/Bluetooth.qml b/.config/quickshell/ii/services/Bluetooth.qml similarity index 100% rename from .config/quickshell/services/Bluetooth.qml rename to .config/quickshell/ii/services/Bluetooth.qml diff --git a/.config/quickshell/services/Booru.qml b/.config/quickshell/ii/services/Booru.qml similarity index 100% rename from .config/quickshell/services/Booru.qml rename to .config/quickshell/ii/services/Booru.qml diff --git a/.config/quickshell/services/BooruResponseData.qml b/.config/quickshell/ii/services/BooruResponseData.qml similarity index 100% rename from .config/quickshell/services/BooruResponseData.qml rename to .config/quickshell/ii/services/BooruResponseData.qml diff --git a/.config/quickshell/services/Brightness.qml b/.config/quickshell/ii/services/Brightness.qml similarity index 100% rename from .config/quickshell/services/Brightness.qml rename to .config/quickshell/ii/services/Brightness.qml diff --git a/.config/quickshell/services/Cliphist.qml b/.config/quickshell/ii/services/Cliphist.qml similarity index 100% rename from .config/quickshell/services/Cliphist.qml rename to .config/quickshell/ii/services/Cliphist.qml diff --git a/.config/quickshell/services/DateTime.qml b/.config/quickshell/ii/services/DateTime.qml similarity index 100% rename from .config/quickshell/services/DateTime.qml rename to .config/quickshell/ii/services/DateTime.qml diff --git a/.config/quickshell/services/Emojis.qml b/.config/quickshell/ii/services/Emojis.qml similarity index 100% rename from .config/quickshell/services/Emojis.qml rename to .config/quickshell/ii/services/Emojis.qml diff --git a/.config/quickshell/services/FirstRunExperience.qml b/.config/quickshell/ii/services/FirstRunExperience.qml similarity index 88% rename from .config/quickshell/services/FirstRunExperience.qml rename to .config/quickshell/ii/services/FirstRunExperience.qml index 4b1f034cd..5bdae4551 100644 --- a/.config/quickshell/services/FirstRunExperience.qml +++ b/.config/quickshell/ii/services/FirstRunExperience.qml @@ -12,8 +12,8 @@ Singleton { property string firstRunFileContent: "This file is just here to confirm you've been greeted :>" property string firstRunNotifSummary: "Welcome!" property string firstRunNotifBody: "Hit Super+/ for a list of keybinds" - property string defaultWallpaperPath: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/assets/images/default_wallpaper.png`) - property string welcomeQmlPath: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/welcome.qml`) + property string defaultWallpaperPath: FileUtils.trimFileProtocol(`${Directories.assetsPath}/images/default_wallpaper.png`) + property string welcomeQmlPath: FileUtils.trimFileProtocol(Quickshell.configPath("welcome.qml")) function load() { firstRunFileView.reload() diff --git a/.config/quickshell/services/HyprlandData.qml b/.config/quickshell/ii/services/HyprlandData.qml similarity index 100% rename from .config/quickshell/services/HyprlandData.qml rename to .config/quickshell/ii/services/HyprlandData.qml diff --git a/.config/quickshell/services/HyprlandKeybinds.qml b/.config/quickshell/ii/services/HyprlandKeybinds.qml similarity index 96% rename from .config/quickshell/services/HyprlandKeybinds.qml rename to .config/quickshell/ii/services/HyprlandKeybinds.qml index 189ba76d5..a313ffc47 100644 --- a/.config/quickshell/services/HyprlandKeybinds.qml +++ b/.config/quickshell/ii/services/HyprlandKeybinds.qml @@ -15,7 +15,7 @@ import Quickshell.Hyprland */ Singleton { id: root - property string keybindParserPath: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/scripts/hyprland/get_keybinds.py`) + property string keybindParserPath: FileUtils.trimFileProtocol(`${Directories.scriptPath}/hyprland/get_keybinds.py`) property string defaultKeybindConfigPath: FileUtils.trimFileProtocol(`${Directories.config}/hypr/hyprland/keybinds.conf`) property string userKeybindConfigPath: FileUtils.trimFileProtocol(`${Directories.config}/hypr/custom/keybinds.conf`) property var defaultKeybinds: {"children": []} diff --git a/.config/quickshell/services/KeyringStorage.qml b/.config/quickshell/ii/services/KeyringStorage.qml similarity index 100% rename from .config/quickshell/services/KeyringStorage.qml rename to .config/quickshell/ii/services/KeyringStorage.qml diff --git a/.config/quickshell/services/LatexRenderer.qml b/.config/quickshell/ii/services/LatexRenderer.qml similarity index 100% rename from .config/quickshell/services/LatexRenderer.qml rename to .config/quickshell/ii/services/LatexRenderer.qml diff --git a/.config/quickshell/services/MaterialThemeLoader.qml b/.config/quickshell/ii/services/MaterialThemeLoader.qml similarity index 100% rename from .config/quickshell/services/MaterialThemeLoader.qml rename to .config/quickshell/ii/services/MaterialThemeLoader.qml diff --git a/.config/quickshell/services/MprisController.qml b/.config/quickshell/ii/services/MprisController.qml similarity index 100% rename from .config/quickshell/services/MprisController.qml rename to .config/quickshell/ii/services/MprisController.qml diff --git a/.config/quickshell/services/Network.qml b/.config/quickshell/ii/services/Network.qml similarity index 100% rename from .config/quickshell/services/Network.qml rename to .config/quickshell/ii/services/Network.qml diff --git a/.config/quickshell/services/Notifications.qml b/.config/quickshell/ii/services/Notifications.qml similarity index 100% rename from .config/quickshell/services/Notifications.qml rename to .config/quickshell/ii/services/Notifications.qml diff --git a/.config/quickshell/services/ResourceUsage.qml b/.config/quickshell/ii/services/ResourceUsage.qml similarity index 100% rename from .config/quickshell/services/ResourceUsage.qml rename to .config/quickshell/ii/services/ResourceUsage.qml diff --git a/.config/quickshell/services/SystemInfo.qml b/.config/quickshell/ii/services/SystemInfo.qml similarity index 100% rename from .config/quickshell/services/SystemInfo.qml rename to .config/quickshell/ii/services/SystemInfo.qml diff --git a/.config/quickshell/services/Todo.qml b/.config/quickshell/ii/services/Todo.qml similarity index 100% rename from .config/quickshell/services/Todo.qml rename to .config/quickshell/ii/services/Todo.qml diff --git a/.config/quickshell/services/Weather.qml b/.config/quickshell/ii/services/Weather.qml similarity index 100% rename from .config/quickshell/services/Weather.qml rename to .config/quickshell/ii/services/Weather.qml diff --git a/.config/quickshell/services/Ydotool.qml b/.config/quickshell/ii/services/Ydotool.qml similarity index 100% rename from .config/quickshell/services/Ydotool.qml rename to .config/quickshell/ii/services/Ydotool.qml diff --git a/.config/quickshell/settings.qml b/.config/quickshell/ii/settings.qml similarity index 100% rename from .config/quickshell/settings.qml rename to .config/quickshell/ii/settings.qml diff --git a/.config/quickshell/shell.qml b/.config/quickshell/ii/shell.qml similarity index 100% rename from .config/quickshell/shell.qml rename to .config/quickshell/ii/shell.qml diff --git a/.config/quickshell/welcome.qml b/.config/quickshell/ii/welcome.qml similarity index 99% rename from .config/quickshell/welcome.qml rename to .config/quickshell/ii/welcome.qml index d9e0770d6..7c1dff4a2 100644 --- a/.config/quickshell/welcome.qml +++ b/.config/quickshell/ii/welcome.qml @@ -42,7 +42,7 @@ ApplicationWindow { Process { id: konachanWallProc property string status: "" - command: ["bash", "-c", FileUtils.trimFileProtocol(`${Directories.config}/quickshell/scripts/colors/random_konachan_wall.sh`)] + command: ["bash", "-c", Quickshell.configPath("scripts/colors/random_konachan_wall.sh")] stdout: SplitParser { onRead: data => { console.log(`Konachan wall proc output: ${data}`); diff --git a/.config/quickshell/scripts/colors/random_konachan_wall.sh b/.config/quickshell/scripts/colors/random_konachan_wall.sh deleted file mode 100755 index 52853d090..000000000 --- a/.config/quickshell/scripts/colors/random_konachan_wall.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/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" From c2f12eedfcec74bbd9bde8b3f191ca97659d0c52 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 09:18:21 +0700 Subject: [PATCH 081/104] fix qs exec (fixes #1610) --- .config/hypr/hyprland/execs.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/hypr/hyprland/execs.conf b/.config/hypr/hyprland/execs.conf index b723454a9..a3d549ecd 100644 --- a/.config/hypr/hyprland/execs.conf +++ b/.config/hypr/hyprland/execs.conf @@ -2,7 +2,7 @@ exec-once = ~/.config/hypr/hyprland/scripts/start_geoclue_agent.sh & gammastep exec-once = sleep 0.7; [ "$(hyprctl monitors -j | jq 'length')" -eq 1 ] && swww-daemon --format xrgb --no-cache || swww-daemon --format xrgb exec-once = sleep 0.7; swww img "$(cat ~/.local/state/quickshell/user/generated/wallpaper/path.txt)" --transition-step 100 --transition-fps 120 --transition-type grow --transition-angle 30 --transition-duration 1 -exec-once = qs & +exec-once = qs -c ii & # Input method exec-once = fcitx5 From 770c4de78b6323472bf3fd03774d28afdcda814c Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 09:19:05 +0700 Subject: [PATCH 082/104] fix more properly --- .config/hypr/hyprland/execs.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/hypr/hyprland/execs.conf b/.config/hypr/hyprland/execs.conf index a3d549ecd..33fc3ffb7 100644 --- a/.config/hypr/hyprland/execs.conf +++ b/.config/hypr/hyprland/execs.conf @@ -2,7 +2,7 @@ exec-once = ~/.config/hypr/hyprland/scripts/start_geoclue_agent.sh & gammastep exec-once = sleep 0.7; [ "$(hyprctl monitors -j | jq 'length')" -eq 1 ] && swww-daemon --format xrgb --no-cache || swww-daemon --format xrgb exec-once = sleep 0.7; swww img "$(cat ~/.local/state/quickshell/user/generated/wallpaper/path.txt)" --transition-step 100 --transition-fps 120 --transition-type grow --transition-angle 30 --transition-duration 1 -exec-once = qs -c ii & +exec-once = qs -c $qsConfig & # Input method exec-once = fcitx5 From f0a2438dea56a0122506c8fb5e9bcb78569bb297 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 09:26:18 +0700 Subject: [PATCH 083/104] fish: add alias for quickshell config --- .config/fish/config.fish | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/fish/config.fish b/.config/fish/config.fish index 4a86ee4f8..8e0c95bf3 100755 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -20,6 +20,7 @@ end alias pamcan pacman alias ls 'eza --icons' alias clear "printf '\033[2J\033[3J\033[1;1H'" +alias q 'qs -c ii' # function fish_prompt From 35b687b4ea8ef66139e776bdddaa146c68016d88 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 09:29:58 +0700 Subject: [PATCH 084/104] fix dirs in scripts --- .config/quickshell/ii/scripts/colors/applycolor.sh | 4 ++-- .config/quickshell/ii/scripts/colors/random_konachan_wall.sh | 4 ++-- .config/quickshell/ii/scripts/colors/switchwall.sh | 4 ++-- .config/quickshell/ii/scripts/kvantum/materialQT.sh | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.config/quickshell/ii/scripts/colors/applycolor.sh b/.config/quickshell/ii/scripts/colors/applycolor.sh index fe87e6553..843ac1260 100755 --- a/.config/quickshell/ii/scripts/colors/applycolor.sh +++ b/.config/quickshell/ii/scripts/colors/applycolor.sh @@ -5,8 +5,8 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" -CACHE_DIR="$XDG_CACHE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" -STATE_DIR="$XDG_STATE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +CACHE_DIR="$XDG_CACHE_HOME/quickshell" +STATE_DIR="$XDG_STATE_HOME/quickshell" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" term_alpha=100 #Set this to < 100 make all your terminals transparent diff --git a/.config/quickshell/ii/scripts/colors/random_konachan_wall.sh b/.config/quickshell/ii/scripts/colors/random_konachan_wall.sh index c44f3e3af..079cad96e 100755 --- a/.config/quickshell/ii/scripts/colors/random_konachan_wall.sh +++ b/.config/quickshell/ii/scripts/colors/random_konachan_wall.sh @@ -5,8 +5,8 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" -CACHE_DIR="$XDG_CACHE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" -STATE_DIR="$XDG_STATE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +CACHE_DIR="$XDG_CACHE_HOME/quickshell" +STATE_DIR="$XDG_STATE_HOME/quickshell" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" mkdir -p ~/Pictures/Wallpapers diff --git a/.config/quickshell/ii/scripts/colors/switchwall.sh b/.config/quickshell/ii/scripts/colors/switchwall.sh index fa834bce7..de76444fd 100755 --- a/.config/quickshell/ii/scripts/colors/switchwall.sh +++ b/.config/quickshell/ii/scripts/colors/switchwall.sh @@ -5,8 +5,8 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" -CACHE_DIR="$XDG_CACHE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" -STATE_DIR="$XDG_STATE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +CACHE_DIR="$XDG_CACHE_HOME/quickshell" +STATE_DIR="$XDG_STATE_HOME/quickshell" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MATUGEN_DIR="$XDG_CONFIG_HOME/matugen" terminalscheme="$SCRIPT_DIR/terminal/scheme-base.json" diff --git a/.config/quickshell/ii/scripts/kvantum/materialQT.sh b/.config/quickshell/ii/scripts/kvantum/materialQT.sh index 835706a2b..a049c5536 100755 --- a/.config/quickshell/ii/scripts/kvantum/materialQT.sh +++ b/.config/quickshell/ii/scripts/kvantum/materialQT.sh @@ -5,8 +5,8 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}" CONFIG_DIR="$XDG_CONFIG_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" -CACHE_DIR="$XDG_CACHE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" -STATE_DIR="$XDG_STATE_HOME/quickshell/$QUICKSHELL_CONFIG_NAME" +CACHE_DIR="$XDG_CACHE_HOME/quickshell" +STATE_DIR="$XDG_STATE_HOME/quickshell" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" get_light_dark() { From a10f08a775033477a0330cb054d963f11bee4bbc Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 09:32:40 +0700 Subject: [PATCH 085/104] unfuck terminal color generation (#1612) --- .config/quickshell/ii/scripts/colors/applycolor.sh | 4 ++-- .../ii/scripts/{ => colors}/terminal/scheme-base.json | 0 .../quickshell/ii/scripts/{ => colors}/terminal/sequences.txt | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename .config/quickshell/ii/scripts/{ => colors}/terminal/scheme-base.json (100%) rename .config/quickshell/ii/scripts/{ => colors}/terminal/sequences.txt (100%) diff --git a/.config/quickshell/ii/scripts/colors/applycolor.sh b/.config/quickshell/ii/scripts/colors/applycolor.sh index 843ac1260..b86fb679e 100755 --- a/.config/quickshell/ii/scripts/colors/applycolor.sh +++ b/.config/quickshell/ii/scripts/colors/applycolor.sh @@ -29,13 +29,13 @@ colorvalues=($colorstrings) # Array of color values apply_term() { # Check if terminal escape sequence template exists - if [ ! -f "$CONFIG_DIR"/scripts/terminal/sequences.txt ]; then + if [ ! -f "$SCRIPT_DIR/terminal/sequences.txt" ]; then echo "Template file not found for Terminal. Skipping that." return fi # Copy template mkdir -p "$STATE_DIR"/user/generated/terminal - cp "$CONFIG_DIR"/scripts/terminal/sequences.txt "$STATE_DIR"/user/generated/terminal/sequences.txt + cp "$SCRIPT_DIR/terminal/sequences.txt" "$STATE_DIR"/user/generated/terminal/sequences.txt # Apply colors for i in "${!colorlist[@]}"; do sed -i "s/${colorlist[$i]} #/${colorvalues[$i]#\#}/g" "$STATE_DIR"/user/generated/terminal/sequences.txt diff --git a/.config/quickshell/ii/scripts/terminal/scheme-base.json b/.config/quickshell/ii/scripts/colors/terminal/scheme-base.json similarity index 100% rename from .config/quickshell/ii/scripts/terminal/scheme-base.json rename to .config/quickshell/ii/scripts/colors/terminal/scheme-base.json diff --git a/.config/quickshell/ii/scripts/terminal/sequences.txt b/.config/quickshell/ii/scripts/colors/terminal/sequences.txt similarity index 100% rename from .config/quickshell/ii/scripts/terminal/sequences.txt rename to .config/quickshell/ii/scripts/colors/terminal/sequences.txt From d05f1ce67f0e73835b68625c98a0df6b12382ffe Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 08:45:11 +0200 Subject: [PATCH 086/104] readme: add discord --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7da858278..05d764ce2 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,13 @@
-![](https://img.shields.io/github/last-commit/end-4/dots-hyprland?&style=for-the-badge&color=FFB1C8&logoColor=D9E0EE&labelColor=292324) -![](https://img.shields.io/github/stars/end-4/dots-hyprland?style=for-the-badge&logo=andela&color=FFB686&logoColor=D9E0EE&labelColor=292324) -[![](https://img.shields.io/github/repo-size/end-4/dots-hyprland?color=CAC992&label=SIZE&logo=googledrive&style=for-the-badge&logoColor=D9E0EE&labelColor=292324)](https://github.com/end-4/hyprland) -![](https://img.shields.io/badge/issues-skill-green?style=for-the-badge&color=CCE8E9&logoColor=D9E0EE&labelColor=292324) - +![](https://img.shields.io/github/last-commit/end-4/dots-hyprland?&style=for-the-badge&color=FFB1C8&logoColor=D9E0EE&labelColor=1E202B) +![](https://img.shields.io/github/stars/end-4/dots-hyprland?style=for-the-badge&logo=andela&color=FFB686&logoColor=D9E0EE&labelColor=1E202B) +[![](https://img.shields.io/github/repo-size/end-4/dots-hyprland?color=CAC992&label=SIZE&logo=googledrive&style=for-the-badge&logoColor=D9E0EE&labelColor=1E202B)](https://github.com/end-4/hyprland) +![](https://img.shields.io/badge/issues-skill-green?style=for-the-badge&color=CCE8E9&logoColor=D9E0EE&labelColor=1E202B) + Dynamic JSON Badge + +
From 75d344c9dfbbb245cfd3e3b1002ef87ddbab7571 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 08:59:05 +0200 Subject: [PATCH 087/104] readme: update badge colors --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 05d764ce2..89a3571dd 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,10 @@
-![](https://img.shields.io/github/last-commit/end-4/dots-hyprland?&style=for-the-badge&color=FFB1C8&logoColor=D9E0EE&labelColor=1E202B) -![](https://img.shields.io/github/stars/end-4/dots-hyprland?style=for-the-badge&logo=andela&color=FFB686&logoColor=D9E0EE&labelColor=1E202B) -[![](https://img.shields.io/github/repo-size/end-4/dots-hyprland?color=CAC992&label=SIZE&logo=googledrive&style=for-the-badge&logoColor=D9E0EE&labelColor=1E202B)](https://github.com/end-4/hyprland) -![](https://img.shields.io/badge/issues-skill-green?style=for-the-badge&color=CCE8E9&logoColor=D9E0EE&labelColor=1E202B) - Dynamic JSON Badge +![](https://img.shields.io/github/last-commit/end-4/dots-hyprland?&style=for-the-badge&color=8ad7eb&logo=git&logoColor=D9E0EE&labelColor=1E202B) +![](https://img.shields.io/github/stars/end-4/dots-hyprland?style=for-the-badge&logo=andela&color=86dbd7&logoColor=D9E0EE&labelColor=1E202B) +[![](https://img.shields.io/github/repo-size/end-4/dots-hyprland?color=86dbce&label=SIZE&logo=protondrive&style=for-the-badge&logoColor=D9E0EE&labelColor=26230e)](https://github.com/end-4/hyprland) + Dynamic JSON Badge From ace114be0b6cf45053cc0583a5822673881421b4 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 09:13:39 +0200 Subject: [PATCH 088/104] Update README.md --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 89a3571dd..6960c07fb 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,8 @@ ![](https://img.shields.io/github/last-commit/end-4/dots-hyprland?&style=for-the-badge&color=8ad7eb&logo=git&logoColor=D9E0EE&labelColor=1E202B) ![](https://img.shields.io/github/stars/end-4/dots-hyprland?style=for-the-badge&logo=andela&color=86dbd7&logoColor=D9E0EE&labelColor=1E202B) -[![](https://img.shields.io/github/repo-size/end-4/dots-hyprland?color=86dbce&label=SIZE&logo=protondrive&style=for-the-badge&logoColor=D9E0EE&labelColor=26230e)](https://github.com/end-4/hyprland) - Dynamic JSON Badge - - +![](https://img.shields.io/github/repo-size/end-4/dots-hyprland?color=86dbce&label=SIZE&logo=protondrive&style=for-the-badge&logoColor=D9E0EE&labelColor=26230e) + Dynamic JSON Badge
@@ -19,7 +17,6 @@

-
Notable features @@ -65,6 +62,12 @@ - For a more comprehensive list of dependencies, see [scriptdata/dependencies.conf](https://github.com/end-4/dots-hyprland/blob/main/scriptdata/dependencies.conf)
+
+ Discord + Join the server + +
+

• screenshots •

From eec1251db6be6977976c27bfbd6390c073d8573a Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 10:06:07 +0200 Subject: [PATCH 089/104] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6960c07fb..dbff414ee 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@
Discord - Join the server + Server link | I hope this provides a friendlier environment for support without needing me to personally accept every friend request/DM. For real issues, prefer GitHub
From b8f04bef41c8707a0850df9ff955133169b710be Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 12:35:49 +0200 Subject: [PATCH 090/104] Update README.md --- README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dbff414ee..28fdb28e7 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,8 @@ _latest and only style that I actively use. Other past styles are still there fo ### illogical-impulseQuickshell +Widget system: Quickshell | Support: Yes + [Showcase video](https://www.youtube.com/watch?v=RPwovTInagE) | AI, settings app | Some widgets | @@ -92,33 +94,47 @@ _latest and only style that I actively use. Other past styles are still there fo ### illogical-impulseAGS (Deprecated) +Widget system: AGS | Support: Limited, no new features + | AI | Common widgets | |:---|:---------------| | ![image](https://github.com/user-attachments/assets/9d7af13f-89ef-470d-ba78-d2288b79cf60) | ![image](https://github.com/end-4/dots-hyprland/assets/97237370/406b72b6-fa38-4f0d-a6c4-4d7d5d5ddcb7) | | Window management | Weeb power | | ![image](https://github.com/user-attachments/assets/02983b9b-79ba-4c25-8717-90bef2357ae5) | ![image](https://github.com/user-attachments/assets/bbb332ec-962a-4e88-a95b-486d0bd8ce76) | -### Unsupported stuff +### 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. - Click image for a presentation video #### m3ww + + Widget system: EWW | Support: No, dead + Material Eww! #### NovelKnock + + Widget system: EWW | Support: No, dead + Desktop Preview #### Hybrid + + Widget system: EWW | Support: No, dead + click the circles! #### Windoes + + Widget system: EWW | Support: No, dead + Desktop Preview From bb5eabb75e008b2653d79832501e19568c244b2a Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 17:36:37 +0700 Subject: [PATCH 091/104] hyprland: fix plasma system monitor keybind --- .config/hypr/hyprland/keybinds.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/hypr/hyprland/keybinds.conf b/.config/hypr/hyprland/keybinds.conf index 0552c1b46..f7dc3ac34 100644 --- a/.config/hypr/hyprland/keybinds.conf +++ b/.config/hypr/hyprland/keybinds.conf @@ -210,7 +210,7 @@ bind = Super+Shift, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_availa bind = Super, X, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kate" "gnome-text-editor" "emacs" # Text editor bind = Ctrl+Super, V, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "pavucontrol-qt" "pavucontrol" # Volume mixer bind = Super, I, exec, XDG_CURRENT_DESKTOP=gnome ~/.config/hypr/hyprland/scripts/launch_first_available.sh "qs -p ~/.config/quickshell/$qsConfig/settings.qml" "systemsettings" "gnome-control-center" "better-control" # Settings app -bind = Ctrl+Shift, Escape, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "gnome-system-monitor" "plasma-systemmonitzor --page-name Processes" "command -v btop && kitty -1 fish -c btop" # Task manager +bind = Ctrl+Shift, Escape, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "gnome-system-monitor" "plasma-systemmonitor --page-name Processes" "command -v btop && kitty -1 fish -c btop" # Task manager # Cursed stuff ## Make window not amogus large From 65179b23586a7700fa232b298779585671fd5a52 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 17:52:42 +0700 Subject: [PATCH 092/104] settings: add 24h/12h time format config --- .../ii/modules/settings/ServicesConfig.qml | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.config/quickshell/ii/modules/settings/ServicesConfig.qml b/.config/quickshell/ii/modules/settings/ServicesConfig.qml index ea4fac69b..349aa2376 100644 --- a/.config/quickshell/ii/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/ii/modules/settings/ServicesConfig.qml @@ -199,4 +199,36 @@ ContentPage { } } } + + ContentSection { + title: "Time" + + ColumnLayout { + // Format + ContentSubsectionLabel { + text: "Time format" + } + ConfigSelectionArray { + currentValue: Config.options.time.format + configOptionName: "time.format" + onSelected: newValue => { + Config.options.time.format = newValue; + } + options: [ + { + displayName: "24h", + value: "hh:mm" + }, + { + displayName: "12h am/pm", + value: "h:mm ap" + }, + { + displayName: "12h AM/PM", + value: "h:mm AP" + }, + ] + } + } + } } From 528f5e755b87d2ca8727abf7a323377ea2651f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=8E?= Date: Fri, 11 Jul 2025 14:57:40 +0300 Subject: [PATCH 093/104] fix hardcoded paths: /home/end -> ~ --- .config/kde-material-you-colors/config.conf | 2 +- .config/qt6ct/qt6ct.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/kde-material-you-colors/config.conf b/.config/kde-material-you-colors/config.conf index 1d63c8405..da9b34a5b 100644 --- a/.config/kde-material-you-colors/config.conf +++ b/.config/kde-material-you-colors/config.conf @@ -10,7 +10,7 @@ monitor = 0 # File containing absolute path of an image (Takes precedence over automatic wallpaper detection) # Commented by default -file = /home/end/.local/state/quickshell/user/wallpaper.txt +file = ~/.local/state/quickshell/user/wallpaper.txt # List of 7 space separated colors (hex or rgb) to be used for text in pywal/konsole/KSyntaxHighlighting instead of wallpaper ones # Accepted values are hex e.g #ff0000 and rgb e.g 255,0,0 colors (rgb is converted to hex) diff --git a/.config/qt6ct/qt6ct.conf b/.config/qt6ct/qt6ct.conf index e8163baa7..f7bfd6003 100644 --- a/.config/qt6ct/qt6ct.conf +++ b/.config/qt6ct/qt6ct.conf @@ -1,5 +1,5 @@ [Appearance] -color_scheme_path=/home/end/.config/qt6ct/style-colors.conf +color_scheme_path=~/.config/qt6ct/style-colors.conf custom_palette=true icon_theme=OneUI standard_dialogs=default From 4d3788cca6377ae8f3e36211e6f478f34c401f88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=8E?= Date: Fri, 11 Jul 2025 15:01:20 +0300 Subject: [PATCH 094/104] fix kde-material-you-colors: wallpaper path --- .config/kde-material-you-colors/config.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/kde-material-you-colors/config.conf b/.config/kde-material-you-colors/config.conf index da9b34a5b..caa1fb8a4 100644 --- a/.config/kde-material-you-colors/config.conf +++ b/.config/kde-material-you-colors/config.conf @@ -10,7 +10,7 @@ monitor = 0 # File containing absolute path of an image (Takes precedence over automatic wallpaper detection) # Commented by default -file = ~/.local/state/quickshell/user/wallpaper.txt +file = ~/.local/state/quickshell/user/generated/wallpaper/path.txt # List of 7 space separated colors (hex or rgb) to be used for text in pywal/konsole/KSyntaxHighlighting instead of wallpaper ones # Accepted values are hex e.g #ff0000 and rgb e.g 255,0,0 colors (rgb is converted to hex) From b1ee817c788faa1e1201467986ea76591a07a342 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:37:04 +0700 Subject: [PATCH 095/104] Update ServicesConfig.qml --- .../quickshell/ii/modules/settings/ServicesConfig.qml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.config/quickshell/ii/modules/settings/ServicesConfig.qml b/.config/quickshell/ii/modules/settings/ServicesConfig.qml index 349aa2376..a9e34512b 100644 --- a/.config/quickshell/ii/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/ii/modules/settings/ServicesConfig.qml @@ -203,11 +203,10 @@ ContentPage { ContentSection { title: "Time" - ColumnLayout { - // Format - ContentSubsectionLabel { - text: "Time format" - } + ContentSubsection { + title: "Format" + tooltip: "" + ConfigSelectionArray { currentValue: Config.options.time.format configOptionName: "time.format" From b958c0ad6c12b20e5da744a3147e74434f69881f Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:37:23 +0700 Subject: [PATCH 096/104] ai: save last chat, make sure model's messages are saved properly --- .config/quickshell/ii/services/Ai.qml | 28 +++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/.config/quickshell/ii/services/Ai.qml b/.config/quickshell/ii/services/Ai.qml index 24521fb63..fe1b4b83e 100644 --- a/.config/quickshell/ii/services/Ai.qml +++ b/.config/quickshell/ii/services/Ai.qml @@ -461,6 +461,7 @@ Singleton { root.postResponseHook(); root.postResponseHook = null; // Reset hook after use } + root.saveChat("lastSession") } function buildGeminiRequestData(model, messages) { @@ -492,7 +493,7 @@ Singleton { return { "role": geminiApiRoleName, "parts": [{ - text: message.content, + text: message.rawContent, }] } }), @@ -517,7 +518,7 @@ Singleton { ...messages.filter(message => (message.role != Ai.interfaceRole)).map(message => { return { "role": message.role, - "content": message.content, + "content": message.rawContent, } }), ], @@ -594,12 +595,15 @@ Singleton { const functionCall = dataJson.candidates[0]?.content?.parts[0]?.functionCall; requester.message.functionName = functionCall.name; requester.message.functionCall = functionCall.name; - requester.message.content += `\n\n[[ Function: ${functionCall.name}(${JSON.stringify(functionCall.args, null, 2)}) ]]\n`; + const newContent = `\n\n[[ Function: ${functionCall.name}(${JSON.stringify(functionCall.args, null, 2)}) ]]\n` + requester.message.rawContent += newContent; + requester.message.content += newContent; root.handleGeminiFunctionCall(functionCall.name, functionCall.args); return } // Normal text response const responseContent = dataJson.candidates[0]?.content?.parts[0]?.text + requester.message.rawContent += responseContent; requester.message.content += responseContent; const annotationSources = dataJson.candidates[0]?.groundingMetadata?.groundingChunks?.map(chunk => { return { @@ -623,6 +627,7 @@ Singleton { // console.log(JSON.stringify(requester.message, null, 2)); } catch (e) { console.log("[AI] Could not parse response from stream: ", e); + requester.message.rawContent += requester.geminiBuffer; requester.message.content += requester.geminiBuffer } finally { requester.geminiBuffer = ""; @@ -664,15 +669,19 @@ Singleton { if (responseContent && responseContent.length > 0) { if (requester.isReasoning) { requester.isReasoning = false; - requester.message.content += "\n\n\n\n"; + const endBlock = "\n\n\n\n"; + requester.message.content += endBlock; + requester.message.rawContent += endBlock; } newContent = dataJson.choices[0]?.delta?.content || dataJson.message.content; } else if (responseReasoning && responseReasoning.length > 0) { // console.log("Reasoning content: ", dataJson.choices[0].delta.reasoning); if (!requester.isReasoning) { requester.isReasoning = true; - requester.message.content += "\n\n\n\n"; - } + const startBlock = "\n\n\n\n"; + requester.message.rawContent += startBlock; + requester.message.content += startBlock; + } newContent = dataJson.choices[0].delta.reasoning || dataJson.choices[0].delta.reasoning_content; } @@ -699,10 +708,12 @@ Singleton { } else { console.log("Unknown API format: ", requester.apiFormat); + requester.message.rawContent += data; requester.message.content += data; } } catch (e) { console.log("[AI] Could not parse response from stream: ", e); + requester.message.rawContent += data; requester.message.content += data; } } @@ -714,8 +725,9 @@ Singleton { try { // to parse full response into json for error handling // console.log("Full response: ", requester.message.content + "]"); - const parsedResponse = JSON.parse(requester.message.content + "]"); - requester.message.content = `\`\`\`json\n${JSON.stringify(parsedResponse, null, 2)}\n\`\`\``; + const parsedResponse = JSON.parse(requester.message.rawContent + "]"); + requester.message.rawContent = `\`\`\`json\n${JSON.stringify(parsedResponse, null, 2)}\n\`\`\``; + requester.message.content = requester.message.rawContent; } catch (e) { // console.log("[AI] Could not parse response on exit: ", e); } From f2831c2b88429e7fb7edb675880879b07d5af68b Mon Sep 17 00:00:00 2001 From: Sighthesia <87855491+Sighthesia@users.noreply.github.com> Date: Fri, 11 Jul 2025 21:44:11 +0800 Subject: [PATCH 097/104] Hug bar round corner transparency --- .config/quickshell/ii/modules/bar/Bar.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.config/quickshell/ii/modules/bar/Bar.qml b/.config/quickshell/ii/modules/bar/Bar.qml index a46779e9e..95cd912c5 100644 --- a/.config/quickshell/ii/modules/bar/Bar.qml +++ b/.config/quickshell/ii/modules/bar/Bar.qml @@ -530,7 +530,6 @@ Scope { size: Appearance.rounding.screenRounding color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" - opacity: 1.0 - Appearance.transparency corner: RoundCorner.CornerEnum.TopLeft states: State { @@ -550,7 +549,6 @@ Scope { } size: Appearance.rounding.screenRounding color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" - opacity: 1.0 - Appearance.transparency corner: RoundCorner.CornerEnum.TopRight states: State { From d482796dc369772e729323346c9c9a6ee3f403ad Mon Sep 17 00:00:00 2001 From: 1cebp <131227161+1cebp@users.noreply.github.com> Date: Fri, 11 Jul 2025 11:17:27 -0400 Subject: [PATCH 098/104] Add Cursor to Code Editor keybind --- .config/hypr/hyprland/keybinds.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/hypr/hyprland/keybinds.conf b/.config/hypr/hyprland/keybinds.conf index f7dc3ac34..89998c860 100644 --- a/.config/hypr/hyprland/keybinds.conf +++ b/.config/hypr/hyprland/keybinds.conf @@ -205,7 +205,7 @@ bind = Super, T, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh bind = Ctrl+Alt, T, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kitty -1" "foot" "alacritty" "wezterm" "konsole" "kgx" "uxterm" "xterm" # [hidden] Kitty (for Ubuntu people) bind = Super, E, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "dolphin" "nautilus" "nemo" "thunar" "kitty -1 fish -c yazi" # File manager bind = Super, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "google-chrome-stable" "zen-browser" "firefox" "brave" "chromium" "microsoft-edge-stable" "opera" # Browser -bind = Super, C, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "code" "codium" "zed" "zedit" "zeditor" "kate" "gnome-text-editor" "emacs" "command -v nvim && kitty -1 nvim" # Code editor +bind = Super, C, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "code" "codium" "cursor" "zed" "zedit" "zeditor" "kate" "gnome-text-editor" "emacs" "command -v nvim && kitty -1 nvim" # Code editor bind = Super+Shift, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "wps" "onlyoffice-desktopeditors" # Office software bind = Super, X, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kate" "gnome-text-editor" "emacs" # Text editor bind = Ctrl+Super, V, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "pavucontrol-qt" "pavucontrol" # Volume mixer From f52cfc3df049beac51d304a90a18df2c3a6ea0e3 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 12 Jul 2025 07:58:34 +0700 Subject: [PATCH 099/104] bar: add keybind to toggle (super+j) --- .config/hypr/hyprland/keybinds.conf | 1 + .config/quickshell/ii/GlobalStates.qml | 1 + .config/quickshell/ii/modules/bar/Bar.qml | 981 ++++++++++++---------- 3 files changed, 517 insertions(+), 466 deletions(-) diff --git a/.config/hypr/hyprland/keybinds.conf b/.config/hypr/hyprland/keybinds.conf index 89998c860..d7c208648 100644 --- a/.config/hypr/hyprland/keybinds.conf +++ b/.config/hypr/hyprland/keybinds.conf @@ -30,6 +30,7 @@ bindd = Super, Slash, Toggle cheatsheet, global, quickshell:cheatsheetToggle # T bindd = Super, K, Toggle on-screen keyboard, global, quickshell:oskToggle # Toggle on-screen keyboard bindd = Super, M, Toggle media controls, global, quickshell:mediaControlsToggle # Toggle media controls bindd = Ctrl+Alt, Delete, Toggle session menu, global, quickshell:sessionToggle # Toggle session menu +bindd = Super, J, Toggle bar, global, quickshell:barToggle # Toggle bar bind = Ctrl+Alt, Delete, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill wlogout || wlogout -p layer-shell # [hidden] Session menu (fallback) bind = Shift+Super+Alt, Slash, exec, qs -p ~/.config/quickshell/$qsConfig/welcome.qml # [hidden] Launch welcome app diff --git a/.config/quickshell/ii/GlobalStates.qml b/.config/quickshell/ii/GlobalStates.qml index b7ddef5a9..75f7bd2cd 100644 --- a/.config/quickshell/ii/GlobalStates.qml +++ b/.config/quickshell/ii/GlobalStates.qml @@ -8,6 +8,7 @@ pragma ComponentBehavior: Bound Singleton { id: root + property bool barOpen: true property bool sidebarLeftOpen: false property bool sidebarRightOpen: false property bool overviewOpen: false diff --git a/.config/quickshell/ii/modules/bar/Bar.qml b/.config/quickshell/ii/modules/bar/Bar.qml index 95cd912c5..36863ec56 100644 --- a/.config/quickshell/ii/modules/bar/Bar.qml +++ b/.config/quickshell/ii/modules/bar/Bar.qml @@ -9,6 +9,7 @@ import QtQuick.Controls import QtQuick.Layouts import Qt5Compat.GraphicalEffects import Quickshell +import Quickshell.Io import Quickshell.Wayland import Quickshell.Hyprland import Quickshell.Services.UPower @@ -36,526 +37,531 @@ Scope { return screens; return screens.filter(screen => list.includes(screen.name)); } - - PanelWindow { // Bar window - id: barRoot + Loader { + id: barLoader + active: GlobalStates.barOpen required property ShellScreen modelData - screen: modelData + sourceComponent: PanelWindow { // Bar window + id: barRoot + screen: barLoader.modelData - property var brightnessMonitor: Brightness.getMonitorForScreen(modelData) - property real useShortenedForm: (Appearance.sizes.barHellaShortenScreenWidthThreshold >= screen.width) ? 2 : (Appearance.sizes.barShortenScreenWidthThreshold >= screen.width) ? 1 : 0 - readonly property int centerSideModuleWidth: (useShortenedForm == 2) ? Appearance.sizes.barCenterSideModuleWidthHellaShortened : (useShortenedForm == 1) ? Appearance.sizes.barCenterSideModuleWidthShortened : Appearance.sizes.barCenterSideModuleWidth + property var brightnessMonitor: Brightness.getMonitorForScreen(barLoader.modelData) + property real useShortenedForm: (Appearance.sizes.barHellaShortenScreenWidthThreshold >= screen.width) ? 2 : (Appearance.sizes.barShortenScreenWidthThreshold >= screen.width) ? 1 : 0 + readonly property int centerSideModuleWidth: (useShortenedForm == 2) ? Appearance.sizes.barCenterSideModuleWidthHellaShortened : (useShortenedForm == 1) ? Appearance.sizes.barCenterSideModuleWidthShortened : Appearance.sizes.barCenterSideModuleWidth - WlrLayershell.namespace: "quickshell:bar" - implicitHeight: Appearance.sizes.barHeight + Appearance.rounding.screenRounding - exclusiveZone: Appearance.sizes.baseBarHeight + (Config.options.bar.cornerStyle === 1 ? Appearance.sizes.hyprlandGapsOut : 0) - mask: Region { - item: barContent - } - color: "transparent" + WlrLayershell.namespace: "quickshell:bar" + implicitHeight: Appearance.sizes.barHeight + Appearance.rounding.screenRounding + exclusiveZone: Appearance.sizes.baseBarHeight + (Config.options.bar.cornerStyle === 1 ? Appearance.sizes.hyprlandGapsOut : 0) + mask: Region { + item: barContent + } + color: "transparent" - anchors { - top: !Config.options.bar.bottom - bottom: Config.options.bar.bottom - left: true - right: true - } - - Item { // Bar content region - id: barContent anchors { - right: parent.right - left: parent.left - top: parent.top - bottom: undefined - } - implicitHeight: Appearance.sizes.barHeight - height: Appearance.sizes.barHeight - - states: State { - name: "bottom" - when: Config.options.bar.bottom - AnchorChanges { - target: barContent - anchors { - right: parent.right - left: parent.left - top: undefined - bottom: parent.bottom - } - } + top: !Config.options.bar.bottom + bottom: Config.options.bar.bottom + left: true + right: true } - // Background shadow - Loader { - active: showBarBackground && Config.options.bar.cornerStyle === 1 - anchors.fill: barBackground - sourceComponent: StyledRectangularShadow { - anchors.fill: undefined // The loader's anchors act on this, and this should not have any anchor - target: barBackground - } - } - // Background - Rectangle { - id: barBackground + Item { // Bar content region + id: barContent anchors { - fill: parent - margins: Config.options.bar.cornerStyle === 1 ? (Appearance.sizes.hyprlandGapsOut) : 0 // idk why but +1 is needed + right: parent.right + left: parent.left + top: parent.top + bottom: undefined } - color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" - radius: Config.options.bar.cornerStyle === 1 ? Appearance.rounding.windowRounding : 0 - border.width: Config.options.bar.cornerStyle === 1 ? 1 : 0 - border.color: Appearance.m3colors.m3outlineVariant - } - - MouseArea { // Left side | scroll to change brightness - id: barLeftSideMouseArea - anchors.left: parent.left - implicitHeight: Appearance.sizes.baseBarHeight + implicitHeight: Appearance.sizes.barHeight height: Appearance.sizes.barHeight - width: (barRoot.width - middleSection.width) / 2 - property bool hovered: false - property real lastScrollX: 0 - property real lastScrollY: 0 - property bool trackingScroll: false - acceptedButtons: Qt.LeftButton - hoverEnabled: true - propagateComposedEvents: true - onEntered: event => { - barLeftSideMouseArea.hovered = true; - } - onExited: event => { - barLeftSideMouseArea.hovered = false; - barLeftSideMouseArea.trackingScroll = false; - } - onPressed: event => { - if (event.button === Qt.LeftButton) { - Hyprland.dispatch('global quickshell:sidebarLeftOpen'); - } - } - // Scroll to change brightness - WheelHandler { - onWheel: event => { - if (event.angleDelta.y < 0) - barRoot.brightnessMonitor.setBrightness(barRoot.brightnessMonitor.brightness - 0.05); - else if (event.angleDelta.y > 0) - barRoot.brightnessMonitor.setBrightness(barRoot.brightnessMonitor.brightness + 0.05); - // Store the mouse position and start tracking - barLeftSideMouseArea.lastScrollX = event.x; - barLeftSideMouseArea.lastScrollY = event.y; - barLeftSideMouseArea.trackingScroll = true; - } - acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad - } - onPositionChanged: mouse => { - if (barLeftSideMouseArea.trackingScroll) { - const dx = mouse.x - barLeftSideMouseArea.lastScrollX; - const dy = mouse.y - barLeftSideMouseArea.lastScrollY; - if (Math.sqrt(dx * dx + dy * dy) > osdHideMouseMoveThreshold) { - Hyprland.dispatch('global quickshell:osdBrightnessHide'); - barLeftSideMouseArea.trackingScroll = false; + + states: State { + name: "bottom" + when: Config.options.bar.bottom + AnchorChanges { + target: barContent + anchors { + right: parent.right + left: parent.left + top: undefined + bottom: parent.bottom } } } - Item { - // Left section - anchors.fill: parent - implicitHeight: leftSectionRowLayout.implicitHeight - implicitWidth: leftSectionRowLayout.implicitWidth - ScrollHint { - reveal: barLeftSideMouseArea.hovered - icon: "light_mode" - tooltipText: qsTr("Scroll to change brightness") - side: "left" - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter + // Background shadow + Loader { + active: showBarBackground && Config.options.bar.cornerStyle === 1 + anchors.fill: barBackground + sourceComponent: StyledRectangularShadow { + anchors.fill: undefined // The loader's anchors act on this, and this should not have any anchor + target: barBackground } + } + // Background + Rectangle { + id: barBackground + anchors { + fill: parent + margins: Config.options.bar.cornerStyle === 1 ? (Appearance.sizes.hyprlandGapsOut) : 0 // idk why but +1 is needed + } + color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" + radius: Config.options.bar.cornerStyle === 1 ? Appearance.rounding.windowRounding : 0 + border.width: Config.options.bar.cornerStyle === 1 ? 1 : 0 + border.color: Appearance.m3colors.m3outlineVariant + } - RowLayout { // Content - id: leftSectionRowLayout + MouseArea { // Left side | scroll to change brightness + id: barLeftSideMouseArea + anchors.left: parent.left + implicitHeight: Appearance.sizes.baseBarHeight + height: Appearance.sizes.barHeight + width: (barRoot.width - middleSection.width) / 2 + property bool hovered: false + property real lastScrollX: 0 + property real lastScrollY: 0 + property bool trackingScroll: false + acceptedButtons: Qt.LeftButton + hoverEnabled: true + propagateComposedEvents: true + onEntered: event => { + barLeftSideMouseArea.hovered = true; + } + onExited: event => { + barLeftSideMouseArea.hovered = false; + barLeftSideMouseArea.trackingScroll = false; + } + onPressed: event => { + if (event.button === Qt.LeftButton) { + Hyprland.dispatch('global quickshell:sidebarLeftOpen'); + } + } + // Scroll to change brightness + WheelHandler { + onWheel: event => { + if (event.angleDelta.y < 0) + barRoot.brightnessMonitor.setBrightness(barRoot.brightnessMonitor.brightness - 0.05); + else if (event.angleDelta.y > 0) + barRoot.brightnessMonitor.setBrightness(barRoot.brightnessMonitor.brightness + 0.05); + // Store the mouse position and start tracking + barLeftSideMouseArea.lastScrollX = event.x; + barLeftSideMouseArea.lastScrollY = event.y; + barLeftSideMouseArea.trackingScroll = true; + } + acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad + } + onPositionChanged: mouse => { + if (barLeftSideMouseArea.trackingScroll) { + const dx = mouse.x - barLeftSideMouseArea.lastScrollX; + const dy = mouse.y - barLeftSideMouseArea.lastScrollY; + if (Math.sqrt(dx * dx + dy * dy) > osdHideMouseMoveThreshold) { + Hyprland.dispatch('global quickshell:osdBrightnessHide'); + barLeftSideMouseArea.trackingScroll = false; + } + } + } + Item { + // Left section anchors.fill: parent - spacing: 10 + implicitHeight: leftSectionRowLayout.implicitHeight + implicitWidth: leftSectionRowLayout.implicitWidth - RippleButton { - // Left sidebar button - Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter - Layout.leftMargin: Appearance.rounding.screenRounding - Layout.fillWidth: false - property real buttonPadding: 5 - implicitWidth: distroIcon.width + buttonPadding * 2 - implicitHeight: distroIcon.height + buttonPadding * 2 - - buttonRadius: Appearance.rounding.full - colBackground: barLeftSideMouseArea.hovered ? Appearance.colors.colLayer1Hover : ColorUtils.transparentize(Appearance.colors.colLayer1Hover, 1) - colBackgroundHover: Appearance.colors.colLayer1Hover - colRipple: Appearance.colors.colLayer1Active - colBackgroundToggled: Appearance.colors.colSecondaryContainer - colBackgroundToggledHover: Appearance.colors.colSecondaryContainerHover - colRippleToggled: Appearance.colors.colSecondaryContainerActive - toggled: GlobalStates.sidebarLeftOpen - property color colText: toggled ? Appearance.m3colors.m3onSecondaryContainer : Appearance.colors.colOnLayer0 - - onPressed: { - Hyprland.dispatch('global quickshell:sidebarLeftToggle'); - } - - CustomIcon { - id: distroIcon - anchors.centerIn: parent - width: 19.5 - height: 19.5 - source: Config.options.bar.topLeftIcon == 'distro' ? SystemInfo.distroIcon : "spark-symbolic" - colorize: true - color: Appearance.colors.colOnLayer0 - } + ScrollHint { + reveal: barLeftSideMouseArea.hovered + icon: "light_mode" + tooltipText: qsTr("Scroll to change brightness") + side: "left" + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter } - ActiveWindow { - visible: barRoot.useShortenedForm === 0 - Layout.rightMargin: Appearance.rounding.screenRounding - Layout.fillWidth: true - Layout.fillHeight: true - bar: barRoot - } - } - } - } - - RowLayout { // Middle section - id: middleSection - anchors.centerIn: parent - spacing: Config.options?.bar.borderless ? 4 : 8 - - BarGroup { - id: leftCenterGroup - Layout.preferredWidth: barRoot.centerSideModuleWidth - Layout.fillHeight: true - - Resources { - alwaysShowAllResources: barRoot.useShortenedForm === 2 - Layout.fillWidth: barRoot.useShortenedForm === 2 - } - - Media { - visible: barRoot.useShortenedForm < 2 - Layout.fillWidth: true - } - } - - VerticalBarSeparator { - visible: Config.options?.bar.borderless - } - - BarGroup { - id: middleCenterGroup - padding: workspacesWidget.widgetPadding - Layout.fillHeight: true - - Workspaces { - id: workspacesWidget - bar: barRoot - Layout.fillHeight: true - MouseArea { - // Right-click to toggle overview + RowLayout { // Content + id: leftSectionRowLayout anchors.fill: parent - acceptedButtons: Qt.RightButton + spacing: 10 - onPressed: event => { - if (event.button === Qt.RightButton) { - Hyprland.dispatch('global quickshell:overviewToggle'); + RippleButton { + // Left sidebar button + Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter + Layout.leftMargin: Appearance.rounding.screenRounding + Layout.fillWidth: false + property real buttonPadding: 5 + implicitWidth: distroIcon.width + buttonPadding * 2 + implicitHeight: distroIcon.height + buttonPadding * 2 + + buttonRadius: Appearance.rounding.full + colBackground: barLeftSideMouseArea.hovered ? Appearance.colors.colLayer1Hover : ColorUtils.transparentize(Appearance.colors.colLayer1Hover, 1) + colBackgroundHover: Appearance.colors.colLayer1Hover + colRipple: Appearance.colors.colLayer1Active + colBackgroundToggled: Appearance.colors.colSecondaryContainer + colBackgroundToggledHover: Appearance.colors.colSecondaryContainerHover + colRippleToggled: Appearance.colors.colSecondaryContainerActive + toggled: GlobalStates.sidebarLeftOpen + property color colText: toggled ? Appearance.m3colors.m3onSecondaryContainer : Appearance.colors.colOnLayer0 + + onPressed: { + Hyprland.dispatch('global quickshell:sidebarLeftToggle'); + } + + CustomIcon { + id: distroIcon + anchors.centerIn: parent + width: 19.5 + height: 19.5 + source: Config.options.bar.topLeftIcon == 'distro' ? SystemInfo.distroIcon : "spark-symbolic" + colorize: true + color: Appearance.colors.colOnLayer0 } } + + ActiveWindow { + visible: barRoot.useShortenedForm === 0 + Layout.rightMargin: Appearance.rounding.screenRounding + Layout.fillWidth: true + Layout.fillHeight: true + bar: barRoot + } } } } - VerticalBarSeparator { - visible: Config.options?.bar.borderless - } + RowLayout { // Middle section + id: middleSection + anchors.centerIn: parent + spacing: Config.options?.bar.borderless ? 4 : 8 - MouseArea { - id: rightCenterGroup - implicitWidth: rightCenterGroupContent.implicitWidth - implicitHeight: rightCenterGroupContent.implicitHeight - Layout.preferredWidth: barRoot.centerSideModuleWidth - Layout.fillHeight: true + BarGroup { + id: leftCenterGroup + Layout.preferredWidth: barRoot.centerSideModuleWidth + Layout.fillHeight: true - onPressed: { - Hyprland.dispatch('global quickshell:sidebarRightToggle'); + Resources { + alwaysShowAllResources: barRoot.useShortenedForm === 2 + Layout.fillWidth: barRoot.useShortenedForm === 2 + } + + Media { + visible: barRoot.useShortenedForm < 2 + Layout.fillWidth: true + } + } + + VerticalBarSeparator { + visible: Config.options?.bar.borderless } BarGroup { - id: rightCenterGroupContent - anchors.fill: parent + id: middleCenterGroup + padding: workspacesWidget.widgetPadding + Layout.fillHeight: true - ClockWidget { - showDate: (Config.options.bar.verbose && barRoot.useShortenedForm < 2) - Layout.alignment: Qt.AlignVCenter - Layout.fillWidth: true - } - - UtilButtons { - visible: (Config.options.bar.verbose && barRoot.useShortenedForm === 0) - Layout.alignment: Qt.AlignVCenter - } - - BatteryIndicator { - visible: (barRoot.useShortenedForm < 2 && UPower.displayDevice.isLaptopBattery) - Layout.alignment: Qt.AlignVCenter - } - } - } - - VerticalBarSeparator { - visible: Config.options.bar.borderless && Config.options.bar.weather.enable - } - } - - MouseArea { // Right side | scroll to change volume - id: barRightSideMouseArea - - anchors.right: parent.right - implicitHeight: Appearance.sizes.baseBarHeight - height: Appearance.sizes.barHeight - width: (barRoot.width - middleSection.width) / 2 - - property bool hovered: false - property real lastScrollX: 0 - property real lastScrollY: 0 - property bool trackingScroll: false - - acceptedButtons: Qt.LeftButton - hoverEnabled: true - propagateComposedEvents: true - onEntered: event => { - barRightSideMouseArea.hovered = true; - } - onExited: event => { - barRightSideMouseArea.hovered = false; - barRightSideMouseArea.trackingScroll = false; - } - onPressed: event => { - if (event.button === Qt.LeftButton) { - Hyprland.dispatch('global quickshell:sidebarRightOpen'); - } else if (event.button === Qt.RightButton) { - MprisController.activePlayer.next(); - } - } - // Scroll to change volume - WheelHandler { - onWheel: event => { - const currentVolume = Audio.value; - const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2; - if (event.angleDelta.y < 0) - Audio.sink.audio.volume -= step; - else if (event.angleDelta.y > 0) - Audio.sink.audio.volume = Math.min(1, Audio.sink.audio.volume + step); - // Store the mouse position and start tracking - barRightSideMouseArea.lastScrollX = event.x; - barRightSideMouseArea.lastScrollY = event.y; - barRightSideMouseArea.trackingScroll = true; - } - acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad - } - onPositionChanged: mouse => { - if (barRightSideMouseArea.trackingScroll) { - const dx = mouse.x - barRightSideMouseArea.lastScrollX; - const dy = mouse.y - barRightSideMouseArea.lastScrollY; - if (Math.sqrt(dx * dx + dy * dy) > osdHideMouseMoveThreshold) { - Hyprland.dispatch('global quickshell:osdVolumeHide'); - barRightSideMouseArea.trackingScroll = false; - } - } - } - - Item { - anchors.fill: parent - implicitHeight: rightSectionRowLayout.implicitHeight - implicitWidth: rightSectionRowLayout.implicitWidth - - ScrollHint { - reveal: barRightSideMouseArea.hovered - icon: "volume_up" - tooltipText: qsTr("Scroll to change volume") - side: "right" - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - } - - RowLayout { - id: rightSectionRowLayout - anchors.fill: parent - spacing: 5 - layoutDirection: Qt.RightToLeft - - RippleButton { // Right sidebar button - id: rightSidebarButton - - Layout.alignment: Qt.AlignRight | Qt.AlignVCenter - Layout.rightMargin: Appearance.rounding.screenRounding - Layout.fillWidth: false - - implicitWidth: indicatorsRowLayout.implicitWidth + 10 * 2 - implicitHeight: indicatorsRowLayout.implicitHeight + 5 * 2 - - buttonRadius: Appearance.rounding.full - colBackground: barRightSideMouseArea.hovered ? Appearance.colors.colLayer1Hover : ColorUtils.transparentize(Appearance.colors.colLayer1Hover, 1) - colBackgroundHover: Appearance.colors.colLayer1Hover - colRipple: Appearance.colors.colLayer1Active - colBackgroundToggled: Appearance.colors.colSecondaryContainer - colBackgroundToggledHover: Appearance.colors.colSecondaryContainerHover - colRippleToggled: Appearance.colors.colSecondaryContainerActive - toggled: GlobalStates.sidebarRightOpen - property color colText: toggled ? Appearance.m3colors.m3onSecondaryContainer : Appearance.colors.colOnLayer0 - - Behavior on colText { - animation: Appearance.animation.elementMoveFast.colorAnimation.createObject(this) - } - - onPressed: { - Hyprland.dispatch('global quickshell:sidebarRightToggle'); - } - - RowLayout { - id: indicatorsRowLayout - anchors.centerIn: parent - property real realSpacing: 15 - spacing: 0 - - Revealer { - reveal: Audio.sink?.audio?.muted ?? false - Layout.fillHeight: true - Layout.rightMargin: reveal ? indicatorsRowLayout.realSpacing : 0 - Behavior on Layout.rightMargin { - NumberAnimation { - duration: Appearance.animation.elementMoveFast.duration - easing.type: Appearance.animation.elementMoveFast.type - easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve - } - } - MaterialSymbol { - text: "volume_off" - iconSize: Appearance.font.pixelSize.larger - color: rightSidebarButton.colText - } - } - Revealer { - reveal: Audio.source?.audio?.muted ?? false - Layout.fillHeight: true - Layout.rightMargin: reveal ? indicatorsRowLayout.realSpacing : 0 - Behavior on Layout.rightMargin { - NumberAnimation { - duration: Appearance.animation.elementMoveFast.duration - easing.type: Appearance.animation.elementMoveFast.type - easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve - } - } - MaterialSymbol { - text: "mic_off" - iconSize: Appearance.font.pixelSize.larger - color: rightSidebarButton.colText - } - } - MaterialSymbol { - Layout.rightMargin: indicatorsRowLayout.realSpacing - text: Network.materialSymbol - iconSize: Appearance.font.pixelSize.larger - color: rightSidebarButton.colText - } - MaterialSymbol { - text: Bluetooth.bluetoothConnected ? "bluetooth_connected" : Bluetooth.bluetoothEnabled ? "bluetooth" : "bluetooth_disabled" - iconSize: Appearance.font.pixelSize.larger - color: rightSidebarButton.colText - } - } - } - - SysTray { + Workspaces { + id: workspacesWidget bar: barRoot - visible: barRoot.useShortenedForm === 0 - Layout.fillWidth: false Layout.fillHeight: true + MouseArea { + // Right-click to toggle overview + anchors.fill: parent + acceptedButtons: Qt.RightButton + + onPressed: event => { + if (event.button === Qt.RightButton) { + Hyprland.dispatch('global quickshell:overviewToggle'); + } + } + } + } + } + + VerticalBarSeparator { + visible: Config.options?.bar.borderless + } + + MouseArea { + id: rightCenterGroup + implicitWidth: rightCenterGroupContent.implicitWidth + implicitHeight: rightCenterGroupContent.implicitHeight + Layout.preferredWidth: barRoot.centerSideModuleWidth + Layout.fillHeight: true + + onPressed: { + Hyprland.dispatch('global quickshell:sidebarRightToggle'); } - Item { - Layout.fillWidth: true - Layout.fillHeight: true + BarGroup { + id: rightCenterGroupContent + anchors.fill: parent + + ClockWidget { + showDate: (Config.options.bar.verbose && barRoot.useShortenedForm < 2) + Layout.alignment: Qt.AlignVCenter + Layout.fillWidth: true + } + + UtilButtons { + visible: (Config.options.bar.verbose && barRoot.useShortenedForm === 0) + Layout.alignment: Qt.AlignVCenter + } + + BatteryIndicator { + visible: (barRoot.useShortenedForm < 2 && UPower.displayDevice.isLaptopBattery) + Layout.alignment: Qt.AlignVCenter + } + } + } + + VerticalBarSeparator { + visible: Config.options.bar.borderless && Config.options.bar.weather.enable + } + } + + MouseArea { // Right side | scroll to change volume + id: barRightSideMouseArea + + anchors.right: parent.right + implicitHeight: Appearance.sizes.baseBarHeight + height: Appearance.sizes.barHeight + width: (barRoot.width - middleSection.width) / 2 + + property bool hovered: false + property real lastScrollX: 0 + property real lastScrollY: 0 + property bool trackingScroll: false + + acceptedButtons: Qt.LeftButton + hoverEnabled: true + propagateComposedEvents: true + onEntered: event => { + barRightSideMouseArea.hovered = true; + } + onExited: event => { + barRightSideMouseArea.hovered = false; + barRightSideMouseArea.trackingScroll = false; + } + onPressed: event => { + if (event.button === Qt.LeftButton) { + Hyprland.dispatch('global quickshell:sidebarRightOpen'); + } else if (event.button === Qt.RightButton) { + MprisController.activePlayer.next(); + } + } + // Scroll to change volume + WheelHandler { + onWheel: event => { + const currentVolume = Audio.value; + const step = currentVolume < 0.1 ? 0.01 : 0.02 || 0.2; + if (event.angleDelta.y < 0) + Audio.sink.audio.volume -= step; + else if (event.angleDelta.y > 0) + Audio.sink.audio.volume = Math.min(1, Audio.sink.audio.volume + step); + // Store the mouse position and start tracking + barRightSideMouseArea.lastScrollX = event.x; + barRightSideMouseArea.lastScrollY = event.y; + barRightSideMouseArea.trackingScroll = true; + } + acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad + } + onPositionChanged: mouse => { + if (barRightSideMouseArea.trackingScroll) { + const dx = mouse.x - barRightSideMouseArea.lastScrollX; + const dy = mouse.y - barRightSideMouseArea.lastScrollY; + if (Math.sqrt(dx * dx + dy * dy) > osdHideMouseMoveThreshold) { + Hyprland.dispatch('global quickshell:osdVolumeHide'); + barRightSideMouseArea.trackingScroll = false; + } + } + } + + Item { + anchors.fill: parent + implicitHeight: rightSectionRowLayout.implicitHeight + implicitWidth: rightSectionRowLayout.implicitWidth + + ScrollHint { + reveal: barRightSideMouseArea.hovered + icon: "volume_up" + tooltipText: qsTr("Scroll to change volume") + side: "right" + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter } - // Weather - Loader { - Layout.leftMargin: 8 - Layout.fillHeight: true - active: Config.options.bar.weather.enable - sourceComponent: BarGroup { - implicitHeight: Appearance.sizes.baseBarHeight - WeatherBar {} + RowLayout { + id: rightSectionRowLayout + anchors.fill: parent + spacing: 5 + layoutDirection: Qt.RightToLeft + + RippleButton { // Right sidebar button + id: rightSidebarButton + + Layout.alignment: Qt.AlignRight | Qt.AlignVCenter + Layout.rightMargin: Appearance.rounding.screenRounding + Layout.fillWidth: false + + implicitWidth: indicatorsRowLayout.implicitWidth + 10 * 2 + implicitHeight: indicatorsRowLayout.implicitHeight + 5 * 2 + + buttonRadius: Appearance.rounding.full + colBackground: barRightSideMouseArea.hovered ? Appearance.colors.colLayer1Hover : ColorUtils.transparentize(Appearance.colors.colLayer1Hover, 1) + colBackgroundHover: Appearance.colors.colLayer1Hover + colRipple: Appearance.colors.colLayer1Active + colBackgroundToggled: Appearance.colors.colSecondaryContainer + colBackgroundToggledHover: Appearance.colors.colSecondaryContainerHover + colRippleToggled: Appearance.colors.colSecondaryContainerActive + toggled: GlobalStates.sidebarRightOpen + property color colText: toggled ? Appearance.m3colors.m3onSecondaryContainer : Appearance.colors.colOnLayer0 + + Behavior on colText { + animation: Appearance.animation.elementMoveFast.colorAnimation.createObject(this) + } + + onPressed: { + Hyprland.dispatch('global quickshell:sidebarRightToggle'); + } + + RowLayout { + id: indicatorsRowLayout + anchors.centerIn: parent + property real realSpacing: 15 + spacing: 0 + + Revealer { + reveal: Audio.sink?.audio?.muted ?? false + Layout.fillHeight: true + Layout.rightMargin: reveal ? indicatorsRowLayout.realSpacing : 0 + Behavior on Layout.rightMargin { + NumberAnimation { + duration: Appearance.animation.elementMoveFast.duration + easing.type: Appearance.animation.elementMoveFast.type + easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve + } + } + MaterialSymbol { + text: "volume_off" + iconSize: Appearance.font.pixelSize.larger + color: rightSidebarButton.colText + } + } + Revealer { + reveal: Audio.source?.audio?.muted ?? false + Layout.fillHeight: true + Layout.rightMargin: reveal ? indicatorsRowLayout.realSpacing : 0 + Behavior on Layout.rightMargin { + NumberAnimation { + duration: Appearance.animation.elementMoveFast.duration + easing.type: Appearance.animation.elementMoveFast.type + easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve + } + } + MaterialSymbol { + text: "mic_off" + iconSize: Appearance.font.pixelSize.larger + color: rightSidebarButton.colText + } + } + MaterialSymbol { + Layout.rightMargin: indicatorsRowLayout.realSpacing + text: Network.materialSymbol + iconSize: Appearance.font.pixelSize.larger + color: rightSidebarButton.colText + } + MaterialSymbol { + text: Bluetooth.bluetoothConnected ? "bluetooth_connected" : Bluetooth.bluetoothEnabled ? "bluetooth" : "bluetooth_disabled" + iconSize: Appearance.font.pixelSize.larger + color: rightSidebarButton.colText + } + } + } + + SysTray { + bar: barRoot + visible: barRoot.useShortenedForm === 0 + Layout.fillWidth: false + Layout.fillHeight: true + } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } + + // Weather + Loader { + Layout.leftMargin: 8 + Layout.fillHeight: true + active: Config.options.bar.weather.enable + sourceComponent: BarGroup { + implicitHeight: Appearance.sizes.baseBarHeight + WeatherBar {} + } } } } } } - } - // Round decorators - Loader { - id: roundDecorators - anchors { - left: parent.left - right: parent.right - } - y: Appearance.sizes.barHeight - width: parent.width - height: Appearance.rounding.screenRounding - active: showBarBackground && Config.options.bar.cornerStyle === 0 // Hug - - states: State { - name: "bottom" - when: Config.options.bar.bottom - PropertyChanges { - roundDecorators.y: 0 + // Round decorators + Loader { + id: roundDecorators + anchors { + left: parent.left + right: parent.right } - } + y: Appearance.sizes.barHeight + width: parent.width + height: Appearance.rounding.screenRounding + active: showBarBackground && Config.options.bar.cornerStyle === 0 // Hug - sourceComponent: Item { - implicitHeight: Appearance.rounding.screenRounding - RoundCorner { - id: leftCorner - anchors { - top: parent.top - bottom: parent.bottom - left: parent.left + states: State { + name: "bottom" + when: Config.options.bar.bottom + PropertyChanges { + roundDecorators.y: 0 } + } - size: Appearance.rounding.screenRounding - color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" + sourceComponent: Item { + implicitHeight: Appearance.rounding.screenRounding + RoundCorner { + id: leftCorner + anchors { + top: parent.top + bottom: parent.bottom + left: parent.left + } - corner: RoundCorner.CornerEnum.TopLeft - states: State { - name: "bottom" - when: Config.options.bar.bottom - PropertyChanges { - leftCorner.corner: RoundCorner.CornerEnum.BottomLeft + size: Appearance.rounding.screenRounding + color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" + opacity: 1.0 - Appearance.transparency + + corner: RoundCorner.CornerEnum.TopLeft + states: State { + name: "bottom" + when: Config.options.bar.bottom + PropertyChanges { + leftCorner.corner: RoundCorner.CornerEnum.BottomLeft + } } } - } - RoundCorner { - id: rightCorner - anchors { - right: parent.right - top: !Config.options.bar.bottom ? parent.top : undefined - bottom: Config.options.bar.bottom ? parent.bottom : undefined - } - size: Appearance.rounding.screenRounding - color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" + RoundCorner { + id: rightCorner + anchors { + right: parent.right + top: !Config.options.bar.bottom ? parent.top : undefined + bottom: Config.options.bar.bottom ? parent.bottom : undefined + } + size: Appearance.rounding.screenRounding + color: showBarBackground ? Appearance.colors.colLayer0 : "transparent" + opacity: 1.0 - Appearance.transparency - corner: RoundCorner.CornerEnum.TopRight - states: State { - name: "bottom" - when: Config.options.bar.bottom - PropertyChanges { - rightCorner.corner: RoundCorner.CornerEnum.BottomRight + corner: RoundCorner.CornerEnum.TopRight + states: State { + name: "bottom" + when: Config.options.bar.bottom + PropertyChanges { + rightCorner.corner: RoundCorner.CornerEnum.BottomRight + } } } } @@ -563,4 +569,47 @@ Scope { } } } + + IpcHandler { + target: "bar" + + function toggle(): void { + GlobalStates.barOpen = !GlobalStates.barOpen + } + + function close(): void { + GlobalStates.barOpen = false + } + + function open(): void { + GlobalStates.barOpen = true + } + } + + GlobalShortcut { + name: "barToggle" + description: qsTr("Toggles bar on press") + + onPressed: { + GlobalStates.barOpen = !GlobalStates.barOpen; + } + } + + GlobalShortcut { + name: "barOpen" + description: qsTr("Opens bar on press") + + onPressed: { + GlobalStates.barOpen = true; + } + } + + GlobalShortcut { + name: "barClose" + description: qsTr("Closes bar on press") + + onPressed: { + GlobalStates.barOpen = false; + } + } } From e42b0d20f8d192697629d5ac127b60aa68004e9a Mon Sep 17 00:00:00 2001 From: Habibul Fauzan <45551081+habibulfauzan@users.noreply.github.com> Date: Sat, 12 Jul 2025 09:24:47 +0700 Subject: [PATCH 100/104] Update rules.conf add windowrule for Zotero Update rules.conf add windowrule for Zotero --- .config/hypr/hyprland/rules.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.config/hypr/hyprland/rules.conf b/.config/hypr/hyprland/rules.conf index ffa3663f4..6b6922a5b 100644 --- a/.config/hypr/hyprland/rules.conf +++ b/.config/hypr/hyprland/rules.conf @@ -27,6 +27,9 @@ windowrulev2 = float, class:.*bluedevilwizard windowrulev2 = float, title:.*Welcome windowrulev2 = float, title:^(illogical-impulse Settings)$ windowrulev2 = float, class:org.freedesktop.impl.portal.desktop.kde +windowrulev2 = float, class:^(Zotero)$ +windowrulev2 = size 45%, class:^(Zotero)$ + # Move # kde-material-you-colors spawns a window when changing dark/light theme. This is to make sure it doesn't interfere at all. From c5982a3ee1ee819156cc02eb79555c5182d8f9db Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 12 Jul 2025 19:05:37 +0700 Subject: [PATCH 101/104] bar: use lazyloader --- .config/quickshell/ii/modules/bar/Bar.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.config/quickshell/ii/modules/bar/Bar.qml b/.config/quickshell/ii/modules/bar/Bar.qml index 36863ec56..eeb77f993 100644 --- a/.config/quickshell/ii/modules/bar/Bar.qml +++ b/.config/quickshell/ii/modules/bar/Bar.qml @@ -37,11 +37,11 @@ Scope { return screens; return screens.filter(screen => list.includes(screen.name)); } - Loader { + LazyLoader { id: barLoader - active: GlobalStates.barOpen + activeAsync: GlobalStates.barOpen required property ShellScreen modelData - sourceComponent: PanelWindow { // Bar window + component: PanelWindow { // Bar window id: barRoot screen: barLoader.modelData From 1e1aeb26737e0cb8dafc70d1e647834cfb13eafb Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 12 Jul 2025 19:05:48 +0700 Subject: [PATCH 102/104] notif popup: fix right spacing --- .../modules/notificationPopup/NotificationPopup.qml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.config/quickshell/ii/modules/notificationPopup/NotificationPopup.qml b/.config/quickshell/ii/modules/notificationPopup/NotificationPopup.qml index fb046343d..3f10a92f4 100644 --- a/.config/quickshell/ii/modules/notificationPopup/NotificationPopup.qml +++ b/.config/quickshell/ii/modules/notificationPopup/NotificationPopup.qml @@ -36,10 +36,13 @@ Scope { NotificationListView { id: listview - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter - anchors.topMargin: 5 + anchors { + top: parent.top + bottom: parent.bottom + right: parent.right + rightMargin: 4 + topMargin: 4 + } implicitWidth: parent.width - Appearance.sizes.elevationMargin * 2 popup: true } From ae58e59d67b5b1633c062cf26828de351d606855 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 12 Jul 2025 19:15:41 +0700 Subject: [PATCH 103/104] search: konachan wallpaper command (#1624) --- .../ii/modules/overview/SearchWidget.qml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.config/quickshell/ii/modules/overview/SearchWidget.qml b/.config/quickshell/ii/modules/overview/SearchWidget.qml index 91998aa9c..c5593e71a 100644 --- a/.config/quickshell/ii/modules/overview/SearchWidget.qml +++ b/.config/quickshell/ii/modules/overview/SearchWidget.qml @@ -40,12 +40,6 @@ Item { // Wrapper } property var searchActions: [ - { - action: "img", - execute: () => { - executor.executeCommand(Directories.wallpaperSwitchScriptPath) - } - }, { action: "dark", execute: () => { @@ -58,6 +52,18 @@ Item { // Wrapper executor.executeCommand(`${Directories.wallpaperSwitchScriptPath} --mode light --noswitch`) } }, + { + action: "wall", + execute: () => { + executor.executeCommand(Directories.wallpaperSwitchScriptPath) + } + }, + { + action: "konachanwall", + execute: () => { + Quickshell.execDetached([Quickshell.configPath("scripts/colors/random_konachan_wall.sh")]) + } + }, { action: "accentcolor", execute: (args) => { From f6bb5385cfe275471511e9f61d4f244c63d7dd90 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 12 Jul 2025 19:25:08 +0700 Subject: [PATCH 104/104] search: use qs' execdetached instead of executor proc --- .../ii/modules/overview/SearchWidget.qml | 171 ++++++++---------- 1 file changed, 73 insertions(+), 98 deletions(-) diff --git a/.config/quickshell/ii/modules/overview/SearchWidget.qml b/.config/quickshell/ii/modules/overview/SearchWidget.qml index c5593e71a..2754567ea 100644 --- a/.config/quickshell/ii/modules/overview/SearchWidget.qml +++ b/.config/quickshell/ii/modules/overview/SearchWidget.qml @@ -4,14 +4,11 @@ import "root:/modules/common" import "root:/modules/common/widgets" import "root:/modules/common/functions/string_utils.js" as StringUtils import Qt5Compat.GraphicalEffects -import Qt.labs.platform import QtQuick import QtQuick.Controls -import QtQuick.Effects import QtQuick.Layouts import Quickshell import Quickshell.Io -import Quickshell.Hyprland Item { // Wrapper id: root @@ -29,9 +26,9 @@ Item { // Wrapper } function cancelSearch() { - searchInput.selectAll() - root.searchingText = "" - searchWidthBehavior.enabled = true; + searchInput.selectAll(); + root.searchingText = ""; + searchWidthBehavior.enabled = true; } function setSearchingText(text) { @@ -43,45 +40,44 @@ Item { // Wrapper { action: "dark", execute: () => { - executor.executeCommand(`${Directories.wallpaperSwitchScriptPath} --mode dark --noswitch`) + Quickshell.execDetached([Directories.wallpaperSwitchScriptPath, "--mode", "dark", "--noswitch"]); } }, { action: "light", execute: () => { - executor.executeCommand(`${Directories.wallpaperSwitchScriptPath} --mode light --noswitch`) + Quickshell.execDetached([Directories.wallpaperSwitchScriptPath, "--mode", "light", "--noswitch"]); } }, { - action: "wall", + action: "wall", execute: () => { - executor.executeCommand(Directories.wallpaperSwitchScriptPath) + Quickshell.execDetached([Directories.wallpaperSwitchScriptPath]); } }, { - action: "konachanwall", + action: "konachanwall", execute: () => { - Quickshell.execDetached([Quickshell.configPath("scripts/colors/random_konachan_wall.sh")]) + Quickshell.execDetached([Quickshell.configPath("scripts/colors/random_konachan_wall.sh")]); } }, { action: "accentcolor", - execute: (args) => { - executor.executeCommand( - `${Directories.wallpaperSwitchScriptPath} --noswitch --color ${args != '' ? ("'"+args+"'") : ""}` - ) + execute: args => { + Quickshell.execDetached([Directories.wallpaperSwitchScriptPath, "--noswitch", "--color", ...(args != '' ? [`${args}`] : [])]); } }, { action: "todo", - execute: (args) => { - Todo.addTask(args) + execute: args => { + Todo.addTask(args); } }, ] function focusFirstItemIfNeeded() { - if (searchInput.focus) appResults.currentIndex = 0; // Focus the first item + if (searchInput.focus) + appResults.currentIndex = 0; // Focus the first item } Timer { @@ -96,32 +92,22 @@ Item { // Wrapper id: mathProcess property list baseCommand: ["qalc", "-t"] function calculateExpression(expression) { - mathProcess.running = false - mathProcess.command = baseCommand.concat(expression) - mathProcess.running = true + mathProcess.running = false; + mathProcess.command = baseCommand.concat(expression); + mathProcess.running = true; } stdout: SplitParser { onRead: data => { - root.mathResult = data - root.focusFirstItemIfNeeded() + root.mathResult = data; + root.focusFirstItemIfNeeded(); } } } - Process { - id: executor - property list baseCommand: ["bash", "-c"] - function executeCommand(command) { - executor.command = baseCommand.concat( - `${command}` - ) - executor.startDetached() - } - } - - Keys.onPressed: (event) => { + Keys.onPressed: event => { // Prevent Esc and Backspace from registering - if (event.key === Qt.Key_Escape) return; + if (event.key === Qt.Key_Escape) + return; // Handle Backspace: focus and delete character if not focused if (event.key === Qt.Key_Backspace) { @@ -142,8 +128,7 @@ Item { // Wrapper } else { // Delete character before cursor if any if (searchInput.cursorPosition > 0) { - searchInput.text = searchInput.text.slice(0, searchInput.cursorPosition - 1) + - searchInput.text.slice(searchInput.cursorPosition); + searchInput.text = searchInput.text.slice(0, searchInput.cursorPosition - 1) + searchInput.text.slice(searchInput.cursorPosition); searchInput.cursorPosition -= 1; } } @@ -156,19 +141,12 @@ Item { // Wrapper } // Only handle visible printable characters (ignore control chars, arrows, etc.) - if ( - event.text && - event.text.length === 1 && - event.key !== Qt.Key_Enter && - event.key !== Qt.Key_Return && - event.text.charCodeAt(0) >= 0x20 // ignore control chars like Backspace, Tab, etc. - ) { + if (event.text && event.text.length === 1 && event.key !== Qt.Key_Enter && event.key !== Qt.Key_Return && event.text.charCodeAt(0) >= 0x20) // ignore control chars like Backspace, Tab, etc. + { if (!searchInput.activeFocus) { searchInput.forceActiveFocus(); // Insert the character at the cursor position - searchInput.text = searchInput.text.slice(0, searchInput.cursorPosition) + - event.text + - searchInput.text.slice(searchInput.cursorPosition); + searchInput.text = searchInput.text.slice(0, searchInput.cursorPosition) + event.text + searchInput.text.slice(searchInput.cursorPosition); searchInput.cursorPosition += 1; event.accepted = true; } @@ -264,7 +242,8 @@ Item { // Wrapper } } - Rectangle { // Separator + Rectangle { + // Separator visible: root.showResults Layout.fillWidth: true height: 1 @@ -281,10 +260,11 @@ Item { // Wrapper bottomMargin: 10 spacing: 2 KeyNavigation.up: searchBar - highlightMoveDuration : 100 + highlightMoveDuration: 100 onFocusChanged: { - if(focus) appResults.currentIndex = 1; + if (focus) + appResults.currentIndex = 1; } Connections { @@ -297,12 +277,15 @@ Item { // Wrapper model: ScriptModel { id: model - values: { // Search results are handled here + values: { + // Search results are handled here ////////////////// Skip? ////////////////// - if(root.searchingText == "") return []; + if (root.searchingText == "") + return []; ///////////// Special cases /////////////// - if (root.searchingText.startsWith(Config.options.search.prefix.clipboard)) { // Clipboard + if (root.searchingText.startsWith(Config.options.search.prefix.clipboard)) { + // Clipboard const searchString = root.searchingText.slice(Config.options.search.prefix.clipboard.length); return Cliphist.fuzzyQuery(searchString).map(entry => { return { @@ -311,14 +294,13 @@ Item { // Wrapper clickActionName: "", type: `#${entry.match(/^\s*(\S+)/)?.[1] || ""}`, execute: () => { - Quickshell.execDetached( - ["bash", "-c", `echo '${StringUtils.shellSingleQuoteEscape(entry)}' | cliphist decode | wl-copy`] - ); + Quickshell.execDetached(["bash", "-c", `echo '${StringUtils.shellSingleQuoteEscape(entry)}' | cliphist decode | wl-copy`]); } }; }).filter(Boolean); - } - if (root.searchingText.startsWith(Config.options.search.prefix.emojis)) { // Clipboard + } + if (root.searchingText.startsWith(Config.options.search.prefix.emojis)) { + // Clipboard const searchString = root.searchingText.slice(Config.options.search.prefix.emojis.length); return Emojis.fuzzyQuery(searchString).map(entry => { return { @@ -328,12 +310,11 @@ Item { // Wrapper clickActionName: "", type: "Emoji", execute: () => { - Quickshell.clipboardText = entry.match(/^\s*(\S+)/)?.[1] + Quickshell.clipboardText = entry.match(/^\s*(\S+)/)?.[1]; } }; }).filter(Boolean); - } - + } ////////////////// Init /////////////////// nonAppResultsTimer.restart(); @@ -346,7 +327,7 @@ Item { // Wrapper execute: () => { Quickshell.clipboardText = root.mathResult; } - } + }; const commandResultObject = { name: searchingText.replace("file://", ""), clickActionName: qsTr("Run"), @@ -354,38 +335,34 @@ Item { // Wrapper fontType: "monospace", materialSymbol: 'terminal', execute: () => { - executor.executeCommand(searchingText.startsWith('sudo') ? `${Config.options.apps.terminal} fish -C '${root.searchingText.replace("file://", "")}'` : root.searchingText.replace("file://", "")); + const cleanedCommand = root.searchingText.replace("file://", ""); + Quickshell.execDetached(["bash", "-c", searchingText.startsWith('sudo') ? `${Config.options.apps.terminal} fish -C '${cleanedCommand}'` : cleanedCommand]); } - } - const launcherActionObjects = root.searchActions - .map(action => { - const actionString = `${Config.options.search.prefix.action}${action.action}`; - if (actionString.startsWith(root.searchingText) || root.searchingText.startsWith(actionString)) { - return { - name: root.searchingText.startsWith(actionString) ? root.searchingText : actionString, - clickActionName: qsTr("Run"), - type: qsTr("Action"), - materialSymbol: 'settings_suggest', - execute: () => { - action.execute(root.searchingText.split(" ").slice(1).join(" ")) - }, - }; - } - return null; - }) - .filter(Boolean); + }; + const launcherActionObjects = root.searchActions.map(action => { + const actionString = `${Config.options.search.prefix.action}${action.action}`; + if (actionString.startsWith(root.searchingText) || root.searchingText.startsWith(actionString)) { + return { + name: root.searchingText.startsWith(actionString) ? root.searchingText : actionString, + clickActionName: qsTr("Run"), + type: qsTr("Action"), + materialSymbol: 'settings_suggest', + execute: () => { + action.execute(root.searchingText.split(" ").slice(1).join(" ")); + } + }; + } + return null; + }).filter(Boolean); let result = []; //////////////// Apps ////////////////// - result = result.concat( - AppSearch.fuzzyQuery(root.searchingText) - .map((entry) => { - entry.clickActionName = qsTr("Launch"); - entry.type = qsTr("App"); - return entry; - }) - ); + result = result.concat(AppSearch.fuzzyQuery(root.searchingText).map(entry => { + entry.clickActionName = qsTr("Launch"); + entry.type = qsTr("App"); + return entry; + })); ////////// Launcher actions //////////// result = result.concat(launcherActionObjects); @@ -407,7 +384,7 @@ Item { // Wrapper type: qsTr("Search the web"), materialSymbol: 'travel_explore', execute: () => { - let url = Config.options.search.engineBaseUrl + root.searchingText + let url = Config.options.search.engineBaseUrl + root.searchingText; for (let site of Config.options.search.excludedSites) { url += ` -site:${site}`; } @@ -419,17 +396,15 @@ Item { // Wrapper } } - delegate: SearchItem { // The selectable item for each search result + delegate: SearchItem { + // The selectable item for each search result required property var modelData anchors.left: parent?.left anchors.right: parent?.right entry: modelData - query: root.searchingText.startsWith(Config.options.search.prefix.clipboard) ? - root.searchingText.slice(Config.options.search.prefix.clipboard.length) : - root.searchingText; + query: root.searchingText.startsWith(Config.options.search.prefix.clipboard) ? root.searchingText.slice(Config.options.search.prefix.clipboard.length) : root.searchingText } } - } } -} \ No newline at end of file +}